1

为什么这两个表达式的结果应该不同?
同样的事情发生在 gcc 和 python 中。这里发生了什么?有什么办法可以预防吗?

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

6

浮点数的精度有限。如果将小数 (3) 与大数 (1e20) 相加,结果通常与大数相同。这里就是这种情况,因此

(3 + 1e20) - 1e20 = 1e20 - 1e20 = 0

的精度double大约是 15 位十进制数字,floats 大约有 7 位十进制数字的精度。

于 2012-07-16T15:33:17.173 回答
3
于 2012-07-16T15:42:28.200 回答