python爲什麼浮點計算不準確?

用戶經常對這樣的結果感到驚訝:

>>> 1.2 - 1.0
0.19999999999999996

並且認爲這是 Python中的一個 bug。其實不是這樣。這與 Python 關係不大,而與底層平臺如何處理浮點數字關係更大。

CPython 中的 float 類型使用C語言的 double 類型進行存儲。 float 對象的值是以固定的精度(通常爲 53 位)存儲的二進制浮點數,由於 Python 使用 C 操作,而後者依賴於處理器中的硬件實現來執行浮點運算。 這意味着就浮點運算而言,Python 的行爲類似於許多流行的語言,包括 C 和 Java。

許多可以輕鬆地用十進制表示的數字不能用二進制浮點表示。例如,之後:

>>> x = 1.2

爲 x 存儲的值是與十進制的值 1.2 (非常接近) 的近似值,但不完全等於它。 在典型的機器上,實際存儲的值是:

1.0011001100110011001100110011001100110011001100110011 (binary)
確切地說:

1.1999999999999999555910790149937383830547332763671875 (decimal)
典型的 53 位精度爲 Python 浮點數提供了 15-16 位小數的精度。

要獲得更完整的解釋,請參閱 Python 教程中的 浮點算術 一章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章