Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Неправильно считает ?


Автор: admsasha 27.11.2008, 09:49
Вот простой код
Код

$a= (-68.63)+(-59.01)+(68.63)+(59.01);
print $a;

вывод
Код

7.105427357601e-15


Почему так ? И как сделать, чтобы был "0"

Автор: amg 27.11.2008, 11:09
Цитата(admsasha @  27.11.2008,  09:49 Найти цитируемый пост)
И как сделать, чтобы был "0"

$a = 0 if abs($a) < 1e-15;

Автор: Itsys 27.11.2008, 11:24
Код

sprintf("%.2f", $a)

Автор: ginnie 27.11.2008, 13:29
Цитата(admsasha @  27.11.2008,  09:49 Найти цитируемый пост)
Почему так ?


Дело в том, что Perl не может любое действительное число представить во встроенном типе данных. Некоторые значения приходится округлять. Из-за округления и получаются такие "странные" результаты.

P.S. http://xpoint.ru/know-how/Articles/FloatingPointNumbers
http://www.validlab.com/goldberg/paper.pdf

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)