我在Perl中遇到了一个奇怪的行为。以下减法应该得到零结果(在Python中它):
print 7.6178E-01 - 0.76178
-1.11022302462516e-16
为什么会发生以及如何避免它?
P.S。效果出现在“为x86_64-linux-gnu-thread-multi构建的v5.10.0”(Ubuntu 9.04)和“为darwin-2level构建的v5.8.9”(Mac OS 10.6)
答案 0 :(得分:8)
不是科学记数法影响精度,而是浮点符号的限制用二进制表示。查看perlfaq4的答案。对于依赖于数字存储的底层架构的任何语言来说,这都是一个问题。
如果您需要更好的号码处理,请查看bignum编译语。