# 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.