Python で浮動小数点数をほぼ等しいかどうか比較するにはどうすればよいでしょうか? 質問する

Python で浮動小数点数をほぼ等しいかどうか比較するにはどうすればよいでしょうか? 質問する

浮動小数点数の等価性の比較は、丸めや精度の問題で少々面倒なことはよく知られています。これに関する例については、ブログ記事をご覧ください。浮動小数点数の比較、2012 年版ブルース・ドーソン著。

Python でこれをどう処理すればいいでしょうか?

これに対する標準ライブラリ関数はどこかで入手できますか?

ベストアンサー1

Python 3.5では、math.iscloseおよびcmath.isclose機能記載の通りペップ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は、すべての場合にそのまま適用される絶対許容値です。差がいずれかの許容値よりも小さい場合、値は等しいとみなされます。

おすすめ記事