2

我在 Perl 中遇到了一个奇怪的行为。以下减法应产生零作为结果(它在 Python 中执行):

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

为什么会发生以及如何避免?

PS 效果出现在“为 x86_64-linux-gnu-thread-multi 构建的 v5.10.0”(Ubuntu 9.04)和“为 darwin-2level 构建的 v5.8.9”(Mac OS 10.6)上

4

1 回答 1

8

并不是科学记数法对精度的影响如此之大,而是以二进制表示的浮点记数法的局限性。请参阅perlfaq4的答案。对于任何依赖于数字存储底层架构的语言来说,这都是一个问题。

如果您需要更好的数字处理,请查看bignum pragma。

于 2010-01-13T14:04:02.647 回答