# [Python-Dev] float.decode()?

**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 <wink>.