[Numpy-discussion] comparing floating point numbers

Ondrej Certik ondrej at certik.cz
Mon Jul 19 21:31:00 EDT 2010


Hi,

I was always using something like

abs(x-y) < eps

or

(abs(x-y) < eps).all()

but today I needed to also make sure this works for larger numbers,
where I need to compare relative errors, so I found this:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

and wrote this:

def feq(a, b, max_relative_error=1e-12, max_absolute_error=1e-12):
    a = float(a)
    b = float(b)
    # if the numbers are close enough (absolutely), then they are equal
    if abs(a-b) < max_absolute_error:
        return True
    # if not, they can still be equal if their relative error is small
    if abs(b) > abs(a):
        relative_error = abs((a-b)/b)
    else:
        relative_error = abs((a-b)/a)
    return relative_error <= max_relative_error


Is there any function in numpy, that implements this? Or maybe even
the better, integer based version, as referenced in the link above?

I need this in tests, where I calculate something on some mesh, then
compare to the correct solution projected on some other mesh, so I
have to deal with accuracy issues.

Ondrej



More information about the NumPy-Discussion mailing list