Reputation: 451
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
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
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