max / min / smallest float value on Python 2.5

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sun Feb 7 03:09:53 CET 2010


On Sun, 07 Feb 2010 00:52:48 +0000, duncan smith wrote:

> Hello,
>        I'm trying to find a clean and reliable way of uncovering
> information about 'extremal' values for floats on versions of Python
> earlier than 2.6 (just 2.5 actually).  I don't want to add a dependence
> on 3rd party modules just for this purpose.  e.g. For the smallest
> positive float I'm using,

Assuming that your architecture is based on binary floats:

>>> x = 1.0/2
>>> while 0.0 + x != 0.0:
...     smallest = x
...     x /= 2.0
...
>>> smallest
4.9406564584124654e-324

which is the smallest number that can be distinguished from zero on my 
system.

If you're running on some weird platform with non-binary floats (perhaps 
a Russian ternary mainframe, or an old supercomputer with decimal floats) 
then you're on your own.

I calculated this using Python 2.5. In 2.6, I see this:

>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, 
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, 
mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)

So there's obviously a difference between how I calculate the smallest 
number and what Python thinks. The reason for this is left as an exercise.



-- 
Steven



More information about the Python-list mailing list