Float precision and float equality

Mark Dickinson dickinsm at gmail.com
Sat Dec 5 11:46:55 EST 2009


On Dec 5, 3:37 pm, Anton81 <gerenu... at googlemail.com> wrote:
> I'd like to do calculations with floats and at some point equality of
> two number will be checked.
> What is the best way to make sure that equality of floats will be
> detected, where I assume that mismatches beyond a certain point are
> due to truncation errors?

Well, it depends a lot on the details of the application, but
a good general scheme is to allow both a fixed relative error
and an absolute error, and to assert that your two values are
'nearly equal' if they're within *either* the relative error *or*
the absolute error.  Something like, for example:

def almostEqual(expected, actual, rel_err=1e-7, abs_err = 1e-20):
    absolute_error = abs(actual-expected)
    return absolute_error <= max(abs_err, rel_err * abs(expected))

Then choose the values of rel_err and abs_err to suit your
application.

What sort of calculations are you doing?
--
Mark



More information about the Python-list mailing list