Влияет ли научная запись на точность Perl? - PullRequest
2 голосов
/ 13 января 2010

Я столкнулся со странным поведением в Perl. Следующее вычитание должно привести к нулю как результат (что он делает в Python):

print 7.6178E-01 - 0.76178
-1.11022302462516e-16

Почему это происходит и как этого избежать?

P.S. Эффект появляется в версиях v5.10.0, созданных для x86_64-linux-gnu-thread-multi (Ubuntu 9.04), и в версиях v5.8.9, созданных для darwin-2level (Mac OS 10.6)

1 Ответ

8 голосов
/ 13 января 2010

Дело не в том, что научная запись влияет на точность в такой степени, как ограничения записи с плавающей запятой, представленной в двоичном виде. Смотрите ответы на perlfaq4 . Это проблема для любого языка, который использует базовую архитектуру для хранения чисел.

Если вам нужна лучшая обработка номеров, ознакомьтесь с прагмой bignum .

...