Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在 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)上
并不是科学记数法对精度的影响如此之大,而是以二进制表示的浮点记数法的局限性。请参阅perlfaq4的答案。对于任何依赖于数字存储底层架构的语言来说,这都是一个问题。
如果您需要更好的数字处理,请查看bignum pragma。