這篇文章主要介紹了Python中的浮點數原理與運算分析,結合實例形式分析了Python浮點數操作的常見錯誤,並簡單解釋了浮點數運算的原理與比較運算實現方法,需要的朋友可以參考下
本文實例講述了Python中的浮點數原理與運算。分享給大家供大家參考,具體如下:
先看一個違反直覺的例子:
>>> s = 0. >>> for i in range(10): s += .1 >>> s 0.9999999999999999 # 错误被累加
再看一個更為普遍,直接影響判斷邏輯的例子:
>>> from math import sqrt >>> a = sqrt(2) >>> a*a == a False
之所以會出現以上的結果,在於Python (更準確地說是電腦硬體體系結構)對浮點數的表示,我們來看計算機(基於二進位)對十進制小數0.1 的表示,十進制小數向二進制小數轉換的方法請參閱Python十進制小數與二進制小數相互轉換。將十進制小數 0.1 轉換為二進制時的結果為 0.0001100110011001....,無限循環,計算機無法展示無限的結果,只能對結果進行截斷,這是浮點數精度問題的根源。
「==」 on floats
#基於以上的考慮,當我們進行浮點數的相等比較時,要特別小心,直接使用== 是有問題的,一個通用的做法即是,不是檢測浮點數是否相等,而是檢測二者是否足夠接近,
##
>>> a = sqrt(2) >>> abs(a*a-2) < epsilon # 判断是否小于某一小量
以上是Python中浮點數的原理以及運算詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!