循环时,python中的1.0 ==(。1 * 10)为False

时间:2014-02-19 22:19:06

标签: python floating-point

我在Python中尝试了这个代码并发现它令人惊讶,任何人都可以解释这个

x=0.0
for i in xrange(0,10):
    x=x+.1

print x #prints 1.0
print x==1.0#false

2 个答案:

答案 0 :(得分:0)

由于floating-point errorsx的真实值为0.9999999999999999,而不是1.0

>>> x=0.0
>>> for i in xrange(0,10):
...     x=x+.1
...
>>> x
0.9999999999999999
>>>

即使它非常接近,0.9999999999999999仍然不等于1.0。这就是为什么Python为False返回x==1.0


print x显示1.0的原因只是printx四舍五入到1.0

>>> x = 0.9999999999999999
>>> print x
1.0
>>> x
0.9999999999999999
>>>

x的真实值仍然等于0.9999999999999999


作为最后的演示,让我们删除for循环并手动添加数字:

>>> x = 0.0
>>> x += .1
>>> x
0.1
>>> x += .1
>>> x
0.2
>>> x += .1
>>> x
0.30000000000000004
>>> x += .1
>>> x
0.4
>>> x += .1
>>> x
0.5
>>> x += .1
>>> x
0.6
>>> x += .1
>>> x
0.7
>>> x += .1
>>> x
0.7999999999999999
>>> x += .1
>>> x
0.8999999999999999
>>> x += .1
>>> x
0.9999999999999999
>>>

正如您所看到的,重复添加.10.0会产生一个小但仍然明显的浮点错误。

答案 1 :(得分:0)

>>> x
0.9999999999999999
>>> print x
1.0

这是浮点精度。