Python代碼:爲什麼這四行代碼給出0.45 <0.45爲真
x=0.35
while (x<0.45):
x=x+0.05
print x,"<",0.45, x<0.45
下面
是輸出:
0.4 < 0.45 True
0.45 < 0.45 True
0.5 < 0.45 False
爲什麼0.45 < 0.45是真的?
Python代碼:爲什麼這四行代碼給出0.45 <0.45爲真
x=0.35
while (x<0.45):
x=x+0.05
print x,"<",0.45, x<0.45
下面
是輸出:
0.4 < 0.45 True
0.45 < 0.45 True
0.5 < 0.45 False
爲什麼0.45 < 0.45是真的?
因爲你實際上比較:
0.44999999999999996 < 0.45
演示:
>>> x=0.35
>>> while (x<0.45):
x = x+0.05
print repr(x),"<",0.45, x<0.45
...
0.39999999999999997 < 0.45 True
0.44999999999999996 < 0.45 True
0.49999999999999994 < 0.45 False
print
電話str
上彩車,它打印的對人友好的版本:
>>> print 0.44999999999999996
0.45
>>> print str(0.44999999999999996)
0.45
>>> print repr(0.44999999999999996)
0.44999999999999996
謝謝,但爲什麼0.35 + 0.05 = 0.3999 ....我是新來的python – Tim
@ user62367這是不相關的蟒蛇,閱讀:[每個計算機科學家應該知道什麼浮點算術](http://docs.oracle.com/cd/E19957-01/ 806-3568/ncg_goldberg.html) –
這被稱爲浮點錯誤。它是由於你想用無限的字節數表示無限數量的數字而產生的。因此,將一個浮點數與另一個浮點數相加將產生一個浮點數,該浮點數可能接近實際的數學結果。 「接近」可能意味着0.0000001左右與預期結果的偏差。您可以在這裏閱讀有關浮點錯誤的更多信息:http://support.microsoft.com/kb/42980
http://docs.python.org/2/tutorial/floatingpoint.html – georg
浮點問題,請查看它們。浮動**不是**確切表示。 – Wrikken
這是一個通用計算問題,也可以在其他語言中找到,請參閱:http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken – Paul