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

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

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.

Is something as simple as the following not good enough?

``return abs(f1 - f2) <= allowed_error``

I would agree that Gareth's answer is probably most appropriate as a lightweight function/solution.

But I thought it would be helpful to note that if you are using NumPy or are considering it, there is a packaged function for this.

``numpy.isclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)``

A little disclaimer though: installing NumPy can be a non-trivial experience depending on your platform.