Looking for the greatest negative float value
Bengt Richter
bokr at oz.net
Thu Jun 12 18:11:22 CEST 2003
On 11 Jun 2003 22:01:43 -0700, danb_83 at yahoo.com (Dan Bishop) wrote:
>mwilson at the-wire.com (Mel Wilson) wrote in message news:<Yr55+ks/KTSM089yn at the-wire.com>...
>> In article <bc7lvb$gm3$1 at news-reader12.wanadoo.fr>,
>> "Gilles Lenfant" <glenfant at NOSPAM.bigfoot.com> wrote:
>> >Hi,
>> >
>> >I need the same as...
>> >
>> >import sys
>> >negmaxint = - sys.maxint -1
>> >
>> >... but for float data
>[snip]
>> -1.7976931348623157e+308
>>
>> and that last number seems credible.
>
>Close. The exact value, per the IEEE 754 standard, is -(2 ** 1024 - 2
>** 972), or -1.7976931348623155e+308. How did you get a *higher*
>magnitude?
Because UIAM the IEEE 754 standard allows 53 significant bits, not 52.
Note that your constant can be rewritten:
>>> -(2**1024 - 2**972) == -(2**52 - 1)*2**972
1
Yet 2**53-1 is eactly representable in a floating point double:
>>> float(2**53-1)
9007199254740991.0
and so of course is the single-bit 2**53
>>> float(2**53+0)
9007199254740992.0
but not the next number - it rounds down to 2**53
>>> float(2**53+1)
9007199254740992.0
starting with 2**53, the lsb is counts by 2
>>> float(2**53+2)
9007199254740994.0
So therefore your constant is a 52-bit number, and we can make one that has 53:
Your number:
>>> float(-(2**52 - 1)*2**972)
-1.7976931348623155e+308
The 53-bit number:
>>> float(-(2**53 - 1)*2**971)
-1.7976931348623157e+308
or like your original format:
>>> float(-(2**1024 - 2**971))
-1.7976931348623157e+308
Bottom line: UIAM the 972 should have been 971
(i.e., 2**971 is the lsb in that number, not 2**972).
Regards,
Bengt Richter
More information about the Python-list
mailing list