我知道浮点号有limitations,所以可以预料到:
>>> 0.1 + 0.2 == 0.3
False
但为什么这个有效?计算机无法存储0.45,0.55 reliably吗?
>>> 0.45 + 0.55 == 1.00
True
我想知道在第一种情况下计算机无法纠正其不准确性,而在后一种情况下它可以。
答案 0 :(得分:4)
如您所知,大多数十进制数字都无法准确存储。除了1.0
之外,您的所有上述数字都是如此。
但它们以高精度存储。而不是0.3
,使用了一些非常接近的可表示数字。它不仅非常接近,而且是最接近的数字。
当您计算0.1 + 0.2
时,会计算另一个可表示的数字,这也非常接近0.3
。你是不幸的"它与最接近的可表示数字不同。
没有真正的运气,0.1
和0.2
都会被稍大一些的数字代表。添加后,两个错误会添加为同一个符号,您会得到类似0.30000000000000004
的内容。
使用0.45 + 0.55
时,错误会有不同的符号并取消。