如何通过计算机处理浮动错误

时间:2017-07-08 11:30:43

标签: python floating-point

我知道浮点号有limitations,所以可以预料到:

>>> 0.1 + 0.2 == 0.3
False

但为什么这个有效?计算机无法存储0.45,0.55 reliably吗?

>>> 0.45 + 0.55 == 1.00
True

我想知道在第一种情况下计算机无法纠正其不准确性,而在后一种情况下它可以。

1 个答案:

答案 0 :(得分:4)

如您所知,大多数十进制数字都无法准确存储。除了1.0之外,您的所有上述数字都是如此。

但它们以高精度存储。而不是0.3,使用了一些非常接近的可表示数字。它不仅非常接近,而且是最接近的数字。

当您计算0.1 + 0.2时,会计算另一个可表示的数字,这也非常接近0.3。你是不幸的"它与最接近的可表示数字不同。

没有真正的运气,0.10.2都会被稍大一些的数字代表。添加后,两个错误会添加为同一个符号,您会得到类似0.30000000000000004的内容。

使用0.45 + 0.55时,错误会有不同的符号并取消。