Floating-point numbers in IEEE 754 format consist of three fields: a
sign bit, a
biased exponent, and a fraction. The following example illustrates the meaning of each. The decimal number 0.1562510 represented in binary is 0.001012 (that is, 1/8 + 1/32). (Subscripts indicate the number
base.) Analogous to
scientific notation, where numbers are written to have a single non-zero digit to the left of the decimal point, we rewrite this number so it has a single 1 bit to the left of the "binary point". We simply multiply by the appropriate power of 2 to compensate for shifting the bits left by three positions: : 0.00101_2 = 1.01_2 \times 2^{-3} Now we can read off the fraction and the exponent: the fraction is .012 and the exponent is −3. As illustrated in the pictures, the three fields in the IEEE 754 representation of this number are: :
sign = 0, because the number is positive. (1 indicates negative.) :
biased exponent = −3 + the "bias". In
single precision, the bias is
127, so in this example the biased exponent is 124; in
double precision, the bias is
1023, so the biased exponent in this example is 1020. :
fraction = .01000…2. IEEE 754 adds a
bias to the exponent so that numbers can in many cases be compared conveniently by the same hardware that compares signed
2's-complement integers. Using a biased exponent, the lesser of two positive floating-point numbers will come out "less than" the greater following the same ordering as for
sign and magnitude integers. If two floating-point numbers have different signs, the sign-and-magnitude comparison also works with biased exponents. However, if both biased-exponent floating-point numbers are negative, then the ordering must be reversed. If the exponent were represented as, say, a 2's-complement number, comparison to see which of two numbers is greater would not be as convenient. The leading 1 bit is omitted since all numbers except zero start with a leading 1; the leading 1 is implicit and doesn't actually need to be stored which gives an extra bit of precision for "free."
Zero The number zero is represented specially: :
sign = 0 for
positive zero, 1 for
negative zero. :
biased exponent = 0. :
fraction = 0.
Denormalized numbers The number representations described above are called
normalized, meaning that the implicit leading binary digit is a 1. To reduce the loss of precision when an
underflow occurs, IEEE 754 includes the ability to represent fractions smaller than are possible in the normalized representation, by making the implicit leading digit a 0. Such numbers are called
denormal. They don't include as many
significant digits as a normalized number, but they enable a gradual loss of precision when the result of an
operation is not exactly zero but is too close to zero to be represented by a normalized number. A denormal number is represented with a biased exponent of all 0 bits, which represents an exponent of −126 in single precision (not −127), or −1022 in double precision (not −1023). In contrast, the smallest biased exponent representing a normal number is 1 (see
examples below). == Representation of non-numbers ==