Prawn Hongs
Prawn Hongs

Reputation: 451

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

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.

Upvotes: 2

Views: 3704

Answers (2)

Draconis
Draconis

Reputation: 3461

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

Upvotes: 2

ShadowRanger
ShadowRanger

Reputation: 155323

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.

Upvotes: 4

Related Questions