7
votes

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.

2

2 Answers

9
votes

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

1
votes

Being the "m" the mantisa and the "e" the exponent, the answer is:

enter image description here

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