sys.float_info.epsilon
Mark Dickinson
dickinsm at gmail.com
Wed Feb 4 21:07:23 CET 2009
On Feb 4, 7:52 pm, Scott David Daniels <Scott.Dani... at Acm.Org> wrote:
> You are missing the whole thing that mes floating point tricky.
> I _believe_ that the epsilon is the smallest positive x such that
> 1.0 != 1.0 + x
Nitpick alert: this isn't quite the same thing, since that
definition is affected by rounding. For example, if you're
using IEEE 754 doubles but (somehow) you've got a round-half-up
rounding mode then this makes epsilon 2**-53 rather than 2**-52,
because 1 + 2**-53 rounds to 1 + 2**-52 != 1.
(This confused the hell out of me many years ago when I was
reading Numerical Recipes, and trying to figure out why
on earth IEEE 754 and the VAX format had different epsilons
even though both had 53-bit mantissas. The answer is that
IEEE 754 uses round-half-even as standard, and VAX uses
round-half-up. Oh, and the authors of Numerical Recipes
used the 1 != 1+x definition...)
Python's float_info.epsilon comes straight from C's
DBL_EPSILON, which is defined very carefully in the C99 standard
as:
"""the difference between 1 and the least value greater than 1
that is representable in the given floating point type"""
(taking the 'given floating point type' to be double).
Mark
More information about the Python-list
mailing list