科学记数法会影响Perl的精确度吗?

Sim*_*mon 2 precision perl numbers

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

print 7.6178E-01 - 0.76178
-1.11022302462516e-16
Run Code Online (Sandbox Code Playgroud)

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

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

bri*_*foy 8

并不是科学记数法会影响精度,因为浮点符号的局限性以二进制表示.查看perlfaq4的答案.对于依赖于数字存储的底层架构的任何语言,这都是一个问题.

如果您需要更好的号码处理,请查看bignum pragma.

  • 这个答案是正确的,但没有解决为什么表达相同数字的两个不同文字被存储为两个不同的表示的问题. (3认同)
  • Simon - 至少在某些极端情况下没有证明这类问题的任何语言要么不使用CPU浮点指令,要么不正确处理浮点数.不幸的是,不正确的数字处理是相对正常的(就基数为10的小数和浮点数之间的转换而言). (2认同)