python – Function to determine if two numbers are nearly equal when rounded to n significant decimal digits
python – Function to determine if two numbers are nearly equal when rounded to n significant decimal digits
As of Python 3.5, the standard way to do this (using the standard library) is with the math.isclose
function.
It has the following signature:
isclose(a, b, rel_tol=1e-9, abs_tol=0.0)
An example of usage with absolute error tolerance:
from math import isclose
a = 1.0
b = 1.00000001
assert isclose(a, b, abs_tol=1e-8)
If you want it with precision of n significant digits, simply replace the last line with:
assert isclose(a, b, abs_tol=10**-n)
There is a function assert_approx_equal
in numpy.testing
(source here) which may be a good starting point.
def assert_approx_equal(actual,desired,significant=7,err_msg=,verbose=True):
Raise an assertion if two items are not equal up to significant digits.
.. note:: It is recommended to use one of `assert_allclose`,
`assert_array_almost_equal_nulp` or `assert_array_max_ulp`
instead of this function for more consistent floating point
comparisons.
Given two numbers, check that they are approximately equal.
Approximately equal is defined as the number of significant digits
that agree.
python – Function to determine if two numbers are nearly equal when rounded to n significant decimal digits
Heres a take.
def nearly_equal(a,b,sig_fig=5):
return ( a==b or
int(a*10**sig_fig) == int(b*10**sig_fig)
)