How to evaluate whether two number are close enough or not in Python?

3.3k views Asked by At

I have two numbers -

3.125000 Mbytes and 2.954880 Mbytes.

I want to compare them and it should return True since they are almost 3Mbytes. How can I do so in Python3.

I tried doing math.isclose(3.125000,2.954880, abs_tol=0.1).

However, this returns False. I really don't understand how to put tolerance here.

math.isclose(3.125000,2.954880,  abs_tol=0.1). 

https://docs.python.org/3/library/math.html

math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

I am using Python 3.5.2.

The expected result is True. The actual result is False.

2

There are 2 answers

0
ShadowRanger On

Your absolute tolerance is set to 0.1, so the difference would have to be less than 0.1 to consider them equal; 3.125000 - 2.954880 is (rounded) 0.17012, which is too big.

If you want them to be considered close, increase your tolerance a bit, e.g.:

math.isclose(3.125000, 2.954880, abs_tol=0.2)

which returns True as you expect.

2
Draconis On

The function math.isclose is really meant for dealing with floating-point imprecisions. You can use it for this, but you need to tune it appropriately: the numbers in your example are more than 0.1 apart.

If you're not worried about floating-point imprecisions, the better way to compare them is the obvious one:

def equivalent(a, b):
    return abs(a-b) < 0.1