我在Python中尝试了这个代码并发现它令人惊讶,任何人都可以解释这个
x=0.0
for i in xrange(0,10):
x=x+.1
print x #prints 1.0
print x==1.0#false
答案 0 :(得分:0)
由于floating-point errors,x
的真实值为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
的原因只是print
将x
四舍五入到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
>>>
正如您所看到的,重复添加.1
到0.0
会产生一个小但仍然明显的浮点错误。
答案 1 :(得分:0)
>>> x
0.9999999999999999
>>> print x
1.0
这是浮点精度。