浮点数表示

需掌握32位和64位浮点数的IEEE表示,可能在选择题中考察。

实数的二进制表示

浮点数在计算机中的存储遵循IEEE标准,但在这里为了方便理解IEEE标准,这里首先阐明一般实数在计算机中是如何存储的。

在这里实数分为两个部分存储:整数部分 和 小数部分,两个部分在逻辑上用 · 隔开。

比如对于以下浮点数的二进制表示:

$$d_m d_{m-1} \cdots d_1 d_0 \cdot d_{-1} d_{-2} \cdots d_{-n}$$

其中每一位对应的数值如下表所示:

$d_m$$d_{m-1}$$\cdots$$d_1$$d_0$$d_{-1}$$d_{-2}$$\cdots$$d_{-n}$
$2^m$$2^{m-1}$$\cdots$$2$$1$$1/2$$1/4$$\cdots$$1/2^{n}$

上述二进制表示对应的数值为

$$b = \sum_{i=-n}^{m} {2^{i} \times b_{i}}$$

其中$b_i = 0$ 或 $b_i = 1$,表示第i为是0还是1。

举例说明如何使用上述表示法计算实数:

  • $101.11_{2}$ 对应的数值为 $1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2} = 5.75$
  • $1011.1_{2}$ 对应的数值为 $8 + 0 + 2 + 1 + \frac{1}{2} = 11.5$

IEEE Floating-Point

上述浮点数存储方式的缺点在于如果要表示比较大的数,就需要比较多的二进制位数,比如对于$5 \times 2^{100}$ 就需要103位。IEEE表示就解决了这个问题,在IEEE表示中,浮点数 $V$ 被表示为 $V = (-1)^{s} \times M \times 2^{E}$,其中 $s, M, E$ 的含义如下:

  • $s$ 为符号位
  • $M$ 为乘法因子
  • $E$ 为浮点数的指数部分

IEEE 754标准是定义浮点数表示和算术的国际标准,它定义了多种不同精度的浮点数格式,但最常见的是单精度 single precesion(32位)和双精度 double precesion(64位),浮点数分为 s, exp, frac 三个部分存储:

s
exp
frac
s
exp
frac (51:32)
31
30
23
22
0
frac (31:0)
63
62
52
51
32
Single Precision
Double Precision
31
0
  • $1$ 位的 $s$ 与上述计算公式中的符号位 $s$ 相同,位于浮点数二进制表示的最高位,标志了浮点数的正负,如果 $s = 1$ 的话 $V$ 是负数,如果 $s = 0$ 的话 $V$ 为正数
  • $k$ 位的 $exp = e_{k-1} \cdots e_1 e_0$ 用于计算指数部分 $E$,使用原码表示,其中 $E = exp - Bias$,其中 $Bias = 2^{k-1} - 1$
    • 对于单精度浮点数,$k = 8$,$Bias = 2^{8-1} - 1 = 127$,$1 \le exp \le 254$,$-126 \le M \le 127$
    • 对于双精度浮点数,$k = 11$,$Bias = 2^{11-1} - 1 = 1023$, $1 \le exp \le 1022$,$-1022 \le M \le 1023$
  • $n$ 位的 $frac = 0 \cdot f_{n-1} \cdots f_1 f_0$ 用于计算因子 $M$,其中 $M = 1 + frac$,$frac$ 表示的小数计算方式见实数的二进制表示
    • 对于单精度浮点数,$n = 23$,$M$ 的最大值为 $2 - 2^{-23}$,$M$ 最小值为 $1$
    • 对于双精度浮点数,$n = 52$,$M$ 的最大值为 $2 - 2^{-52}$,$M$ 最小值为 $1$
s
s
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
s
s
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
≠ 0
≠ 0
s
s
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
frac
frac
s
s
≠ 0 and ≠ 255
≠ 0 and ≠ 255
frac
frac
Normalized
Normalized
Denormalized
Denormalized
Infinity
Infinity
NaN
NaN
Text is not SVG - cannot display

视频讲解