The IEEE 64-Bit Floating Point Format
The IEEE-754 Standard (1985) represents floating point values by dividing a 64-bit word into a 52-bit mantissa (plus sign bit) and an 11-bit (two's complement) exponent. The sign bit, although in the first bit position, represents the sign of the mantissa, where "0=positive".
|SIGN (1)||EXPONENT (11)||MANTISSA (52)|
What Decimal Range is Available?
Numbers to be stored must first be normalized. To this end, the exponent (powers of two) is adjusted until the mantissa is between 1.000 and 1.111... (Binary normalization is similar to writing decimals in scientific notation.) Once normalized, the number may be stored; however, since all normized numbers must begin with '1', there is no real need to actually store that digit. Consequently, the 1 is never stored and the 52 stored bits actually represent a 53-bit mantissa, always with an (implied) 1 at the start.
Note that zero is a special case, represented by all zeros.
53 binary digits are sufficient to represent, in decimal, 9 x 1015. Consequently, this floating point number holds about 15 decimal digits.
11 exponent bits represent (signed) powers up to 210 = 1024. Since this exponent represents powers of two, the equivalent decimal number is 21024 = 10308.25471566 = 1.8 x 10+308. Consequently, this floating point number holds decimal exponents up to about 10308. The published range of this number storage format is shown below.
In practice, the exponent uses "offset 3FF". In other words hexadecimal 3FF is added to the exponent before storage, as shown below:
EXAMPLE 1 ... decimal Value = +10
This number in binary = 1010
Normalized is 1.01000000 x 23 (leading 1 will not be stored)
MANTISSA = 0100 0000 0000 0000... (binary) = 4000... (hex)
EXPONENT = 3FF + 3 = 402 (hex)
iAPX 86/88, 186/188 User's Manual, 1986 Intel Corporation, ISBN 1-55512-010-5