Next float?

Mark T nospam at nospam.com
Thu Nov 22 05:48:27 CET 2007


"Steven D'Aprano" <steven at REMOVE.THIS.cybersource.com.au> wrote in message 
news:pan.2007.11.22.03.04.41 at REMOVE.THIS.cybersource.com.au...
> 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

Here's some functions to get the binary representation of a float.  Then 
just manipulate the bits (an exercise for the reader):

import struct

def f2b(f):
    return struct.unpack('I',struct.pack('f',f))[0]

def b2f(b):
    return struct.unpack('f',struct.pack('I',b))[0]

>>> f2b(1.0)
1065353216
>>> hex(f2b(1.0))
'0x3f800000'
>>> b2f(0x3f800000)
1.0
>>> b2f(0x3f800001)
1.0000001192092896
>>> b2f(0x3f7fffff)
0.99999994039535522

-Mark 




More information about the Python-list mailing list