问题
I am wondering if the max float represented in IEEE 754 is:
(1.11111111111111111111111)_b*2^[(11111111)_b-127]
Here _b
means binary representation. But that value is 3.403201383*10^38
, which is different from 3.402823669*10^38
, which is (1.0)_b*2^[(11111111)_b-127]
and given by for example c++
<limits>
. Isn't
(1.11111111111111111111111)_b*2^[(11111111)_b-127]
representable and larger in the framework?
Does anybody know why?
Thank you.
回答1:
The exponent 11111111b is reserved for infinities and NaNs, so your number cannot be represented.
The greatest value that can be represented in single precision, approximately 3.4028235×1038, is actually 1.11111111111111111111111b×211111110b-127.
See also http://en.wikipedia.org/wiki/Single-precision_floating-point_format
回答2:
Being the "m" the mantisa and the "e" the exponent, the answer is:
In your case, if the number of bits on IEEE 754 are:
- 16 Bits you have 1 for the sign, 6 for the exponent and 11 for the mantisa. The largest number represented is 4,293,918,720.
- 32 Bits you have 1 for the sign, 8 for the exponent and 23 for the mantisa. The largest number represented is 3.402823466E38
- 64 Bits you have 1 for the sign, 11 for the exponent and 52 for the mantisa. The largest number represented is 2^1024 - 2^971
来源:https://stackoverflow.com/questions/10233444/max-float-represented-in-ieee-754