Python 中的近似浮點相等:標準函式來救援
人們普遍認為,比較浮點是否精確相等可能會出現問題,因為由於浮點精度限制,簡單的相等性檢查變得不可靠。我們如何在 Python 中克服這項挑戰?
Python 的內建解決方案
Python 3.5 版本為此引入了兩個基本函數:math.isclose 和 cmath.isclose 。這些函數(如 PEP 485 中所定義)可以對浮點數進行穩健比較,同時考慮與精確度相關的差異。
isclose 函數
isclose 函數採用三個參數:
rel_tol 表示相對於允許的偏差百分比a 和b 的大小。另一方面,abs_tol 是一個無論大小都必須滿足的絕對閾值。
容差注意事項
函數比較 a 和 b 之間的絕對差rel_tol * max(|a|, |b|) 和 abs_tol。如果差異小於這些值中的任何一個,則浮點數被視為相等。
早期Python 版本的等效實作
對於3.5 之前的Python 版本,等效的實作函數可以定義如下:
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
利用此函數可以讓您自信地比較浮點數是否近似相等,在Python 中處理數值資料時這是非常寶貴的工具。
以上是如何在 Python 中可靠地比較浮點數是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!