Function to determine if two numbers are nearly equal when rounded to n significant decimal digits Function to determine if two numbers are nearly equal when rounded to n significant decimal digits numpy numpy

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 isclosea = 1.0b = 1.00000001assert 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.


Here's a take.

def nearly_equal(a,b,sig_fig=5):    return ( a==b or              int(a*10**sig_fig) == int(b*10**sig_fig)           )