![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| wladk |
|
||||
|
Unregistered |
Без долгих рассуждений - есть код:
Насколько я помню математику 4-го класса, от перемены мест множителей произведение не меняется. Данный скрипт иллюстрирует, что у перла на это свое мнение. (результат работы приведенного выше скрипта)
Я понимаю, что проблемма связана с представлением чисел с плавающей запятой в компьютере. Но все же, что же делать то? Есть идеи? |
||||
|
|||||
| Kiber_rat |
|
|||
![]() MACMANIAC ![]() ![]() Профиль Группа: Участник Сообщений: 276 Регистрация: 18.4.2002 Где: Ashdod, Israel Репутация: 7 Всего: 9 |
Я бы попробовал заюзать какой нить математический модуль... Math::Big к примеру. А по простому - используй целочисленную математику., т.е. перед тем как использовать операнды, умножь их на 10000 (что бы все стали целыми) а потом результат - раздели на те же 10000
Это сообщение отредактировал(а) Kiber_rat - 25.11.2005, 01:52 -------------------- Best regards! @..@_____Ku6ep =*=______\______KPbIC
|
|||
|
||||
| Uhuhu |
|
|||
|
Unregistered |
Перл округляет числа не по привычной математической схеме (до пяти сотых - меньше, после - больше), а по привычной для программистов схеме (и более удобной?): к четному числу.
Читайте спецификацию языка |
|||
|
||||
| wladk |
|
||||||
|
Unregistered |
1. Для програмиста много чего привычно и удобно 2, Если вы внимательно посмотрите на данные, то увидите, что в одном случае округлестя к четному 949762.48, а другой раз к не четному 949762.48. Вот в эотом то был вопрос.... в зависимости результат от порядка следования операндов...
ссылочку будьте добры. А то у меня в башку вот засело, хоть ты тресни
Что в принципе соотносится с данными в предидущем примере.... А вы случайно не спутали с функцией Round, модуля Math::BigFloat, вот у нее таки да, такой характер.... |
||||||
|
|||||||
| Guest |
|
|||
|
Unregistered |
Спасибо за идею.... ВОт идея с челочисленной математикой мне понравилась... Только наверное и хранить так надо.... а при выводе делить. Только не 10000, а на кол-во множителей*10000:) А моножителей может быть дофигища...... Все равно спасибо! Вывел меня из ступора!:))) |
|||
|
||||
| Usya |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
А что здесь поделаешь??? Ничего... Perl все правильно сделал. Я тебе могу кучу примеров привести, где от перестановки может координально поменяться ответ. Да и в учебниках есть соответствующие примеры об этом... И округлил Perl результаты правильно. На счет умножения на 10000 - может подойти в 99% случаев. Все зависит от того, сколько и какие арифметические операции ты выполняешь, нужно ли сохранять промежуточные округленные данные с последующим использованием и с какой точностью они сохранены, а то там может начать давать о себе знать погрешность округлений. На счет идей - попробуй перед тем, как выводить результат в приведенном коде, прибавить к нему, например, 0.0000000001 - мелочь, а приятно. И будет Вам счастье P/s
Почитай про абсолютную погрешность и ты сам сможешь ее оценить. А то может эта погрешность оказаться больше твоего результата со всеми вытекающими последствиями Это сообщение отредактировал(а) Usya - 26.11.2005, 06:30 --------------------
Я не волшебник, я только учусь... |
||||
|
|||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |