On Nov 22, 2007 4:04 AM, Steven D'Aprano
<[EMAIL PROTECTED]> wrote:
> Is there a simple, elegant way in Python to get the next float from a
> given one? By "next float", I mean given a float x, I want the smallest
> float larger than x.
>
> Bonus points if I can go in either direction (i.e. the "previous float"
> as well as the next).
>
> Note to maths pedants: I am aware that there is no "next real number",
> but floats are not reals.
> --
> Steven

You could use the library functions for floating-point math in mpmath
(http://code.google.com/p/mpmath/), which support directed rounding.
Load a floating-point number, add a tiny number and round in the
wanted direction, then convert back to a Python float:

>>> from mpmath.lib import *
>>> eps = (1, -2000, 1)    # 2**-2000, smaller than any finite
positive IEEE 754 double
>>> a = from_float(1.0, 53, ROUND_HALF_EVEN) # note: exact
>>> to_float(fadd(a, eps, 53, ROUND_UP))
1.0000000000000002
>>> to_float(fsub(a, eps, 53, ROUND_DOWN))
0.99999999999999989

This currently probably doesn't work if the numbers are subnormal, however.

Fredrik
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to