What is the best way to compare floats for almost-equality in Python?

后端 未结 15 1557
旧时难觅i
旧时难觅i 2020-11-21 05:07

It\'s well known that comparing floats for equality is a little fiddly due to rounding and precision issues.

For example: https://randomascii.wordpress.com/2012/02/2

15条回答
  •  -上瘾入骨i
    2020-11-21 06:03

    Python 3.5 adds the math.isclose and cmath.isclose functions as described in PEP 485.

    If you're using an earlier version of Python, the equivalent function is given in the documentation.

    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 is a relative tolerance, it is multiplied by the greater of the magnitudes of the two arguments; as the values get larger, so does the allowed difference between them while still considering them equal.

    abs_tol is an absolute tolerance that is applied as-is in all cases. If the difference is less than either of those tolerances, the values are considered equal.

提交回复
热议问题