我在 Perl 中遇到了一个奇怪的行为。以下减法的结果应为零(在 Python 中是这样做的):
print 7.6178E-01 - 0.76178
-1.11022302462516e-16
为什么会发生以及如何避免?
附:效果出现在“v5.10.0built for x86_64-linux-gnu-thread-multi”(Ubuntu 9.04)和“v5.8.9built for darwin-2level”(Mac OS 10.6)上
并不是科学计数法对精度的影响如此之大,而是二进制表示的浮点计数法的局限性。请参阅以下问题的答案perlfaq4。对于任何依赖数字存储底层架构的语言来说,这都是一个问题。
- 为什么我得到的是长小数(例如,19.9499999999999)而不是我应该得到的数字(例如,19.95)?
- 为什么 int() 被破坏了?
如果您需要更好的号码处理,请查看bignum pragma.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)