为什么Python解释器中会出现以下情况?
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> 0.1+0.1
0.2
>>> 0.2+0.1
0.30000000000000004
>>> 0.3-0.3
0.0
>>> 0.2+0.1
0.30000000000000004
>>>
为什么不0.2 + 0.1 = 0.3
?
答案 0 :(得分:12)
那是因为.1
无法在二进制浮点表示中精确表示。如果你试试
>>> .1
Python将以.1
响应,因为它只打印一定的精度,但已经有一个小的舍入错误。 .3
会发生同样的情况,但是当您发出
>>> .2 + .1
0.30000000000000004
然后.2
和.1
中的舍入错误会累积。另请注意:
>>> .2 + .1 == .3
False
答案 1 :(得分:11)
并非所有浮点数都可以在有限的机器上精确表示。在二进制浮点中,0.1和0.2都不能精确表示。而且也不是0.3。
如果数字是a / b形式,其中a和b是整数,b是2的幂,则数字是完全可表示的。显然,数据类型需要具有足够大的有效数来存储数字。
我建议使用Rob Kennedy's useful webpage作为探索可表示性的好工具。