[Python-Dev] float.decode()? (original) (raw)

Tim Peters tim.one@comcast.net
Mon, 15 Apr 2002 18:14:28 -0400


[Neil Schemenauer]

Common Lisp has a function called decode-float:

(decode-float float) => significand, exponent, sign computes three values that characterize float. The first value is of the same type as float and represents the significand. The second value represents the exponent to which the radix (notated in this description by b) must be raised to obtain the value that, when multiplied with the first result, produces the absolute value of float. If float is zero, any integer value may be returned, provided that the identity shown for scale-float holds. The third value is of the same type as float and is 1.0 if float is greater than or equal to zero or -1.0 otherwise. How hard would it be to write a method like this for Python floats? I think it could go a long way in helping people understand how floating point works.

Python's math.frexp() already exposes a very similar standard C function. If you take the terms as defined above, it's

math.frexp(float) => significand * sign, exponent

math.frexp(18) (0.5625, 5) math.frexp(-18.5) (-0.578125, 5)

Separating out the sign is a nice little convenience, reflecting common use (most uses of frexp() immediately test-and-branch on the significand's sign bit right after!).

"decode-float" sounds like some Unicode function, while "frexp" is wonderfully mnemonic .