本文實例講述了Python中的浮點數(shù)原理與運算。分享給大家供大家參考,具體如下:
先看一個違反直覺的例子:
>>> s = 0.>>> for i in range(10): s += .1>>> s0.9999999999999999# 錯誤被累加
再看一個更為普遍,直接影響判斷邏輯的例子:
>>> from math import sqrt>>> a = sqrt(2)>>> a*a == aFalse
之所以會出現(xiàn)以上的結(jié)果,在于 Python (更準(zhǔn)確地說是計算機硬件體系結(jié)構(gòu))對浮點數(shù)的表示,我們來看計算機(基于二進制)對十進制小數(shù) 0.1 的表示,十進制小數(shù)向二進制小數(shù)轉(zhuǎn)換的方法請見 Python十進制小數(shù)與二進制小數(shù)相互轉(zhuǎn)換。將十進制小數(shù) 0.1 轉(zhuǎn)換為二進制時的結(jié)果為 0.0001100110011001....,無限循環(huán),計算機無法展示無限的結(jié)果,只能對結(jié)果進行截斷,這是浮點數(shù)精度問題的根源。
“==” on floats
基于以上的考慮,當(dāng)我們進行浮點數(shù)的相等比較時,要特別小心,直接使用 == 是有問題的,一種通用的做法即是,不是檢測浮點數(shù)是否相等,而是檢測二者是否足夠接近,
>>> a = sqrt(2)>>> abs(a*a-2) < epsilon# 判斷是否小于某一小量
希望本文所述對大家Python程序設(shè)計有所幫助。
新聞熱點
疑難解答
圖片精選