[Python-Dev] Adding DBL_MANTISSA and such to Python

Edward C. Jones edcjones at comcast.net
Thu May 5 05:37:20 CEST 2005

Recently I needed some information about the floating point numbers on 
my machine. So I wrote a tiny C99 program with the line

printf("%a\n", DBL_EPSILON);

The answer was "0x1p-52".

A search of comp.lang.python shows that I was not alone. Here are some 

1. Add to Python the constants in "float.h" and "limits.h".

2. Add the C99 "%a" format to the "%" operator for strings and allow it 
in floating point literals.

3. Add full "tostring" and "fromstring" capabilities for Python numeric 
types. "tostring(x)" would return a string containing the binary 
representation of x. For example, if x is a Python float, "tostring(x)" 
would have eight characters. "fromstring(s, atype)" does the reserve, so
     fromstring(tostring(x), type(x)) == x

4. Add some functions that process floating point types at a low level. 
I suggest borrowing from C
     (mantissa, exponent) = frexp(x)
where mantissa is a float and exponent is an int. The mantissa can be 
0.0 or 0.5 <= mantissa < 1.0. Also x = mamtissa * 2**exponent. If
x == 0.0, the function returns (0.0, 0). (This is almost a quote from 
Harbison and Steele.)

5. Add the C99 constants and functions involving special floating point 
"fpclassify", "isfinite", "isinf", "isnan", "isnormal", "signbit", 
"copysign", "nan", "nextafter", and "nexttoward". There has been 
controversy about these in the past, but I am in favor of them. The 
documentation should discuss portability.

More information about the Python-Dev mailing list