1. ホーム
  2. python

[解決済み] Pythonでfloatをほぼ等しく比較する最良の方法は何ですか?

2022-03-23 20:22:42

質問

浮動小数点数の等値比較は、丸めや精度の問題で少し面倒なのはよく知られています。

例えば https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

Pythonでこれを扱うには、どのような方法が推奨されますか?

きっとどこかに標準ライブラリの関数があるのでしょう?

どのように解決するのですか?

Python 3.5では math.isclosecmath.isclose 機能 で説明したように PEP 485 .

以前のバージョンの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)

rel_tol は相対的な許容範囲であり、2つの引数の大きさのうち大きい方を掛け合わせます。値が大きくなればなるほど、両者を等しいと見なしながら許容される差も大きくなります。

abs_tol は絶対許容値で、すべてのケースでそのまま適用されます。その差がいずれかの公差より小さい場合、その値は等しいとみなされます。