[Numpy-discussion] [RFC] new function for floating point comparison
David Cournapeau
david at ar.media.kyoto-u.ac.jp
Thu Oct 29 03:17:10 EDT 2009
Hi,
I have added a couple of utilities for floating point comparison, to
be used in unit tests mostly, and would like some comments, especially
from people knowledgeable about floating point.
http://github.com/cournape/numpy/tree/new_ulp_comp
The main difference compared to other functions is that they are
'amplitude-independent', and use IEEE-754-specific properties. The
tolerance is based on ULP, and two numbers x, y are closed depending on
how many numbers are representable between x and y at the given
precision. The branch contains the following new functions:
* spacing(x): equivalent to the F90 intrinsic. Returns the smallest
representable number needed so that spacing(x) + x > x. Spacing(1) is
EPS by definition.
* assert_array_almost_equal_nulp(x, y, nulp=1): assertion is defined
as abs(x - y) <= nulps * spacing(max(abs(x), abs(y))).
* assert_array_max_ulp(a, b, maxulp=1, dtype=None): given two
numbers a and b, raise an assertion if there are more than maxulp
representable numbers between a and b.
They only support single and double precision - for complex number, one
could arbitrarily define a distance between numbers based on nulps, say
max of number of representable number for real and imag parts. Extended
precision would be a bit more painful, because of the variety of
implementations.
I hope that they can give more robust/meaningful comparison for most of
our unit tests,
cheers,
David
More information about the NumPy-Discussion
mailing list