奎克的藏经阁 · 原书印刷页

编码 隐匿在计算机软硬件背后的语言 · 第 373 页

PDF 物理页索引 389 · 编码隐匿在计算机软硬件背后的语言

书名
编码 隐匿在计算机软硬件背后的语言
作者
未记录
印刷页
373
PDF 物理页
389(从 0 开始)
章节
编码隐匿在计算机软硬件背后的语言
UUID
38270854-596f-4a26-8183-db8c968c6020
来源类型
original_book
页面 SHA-256
21866f29144cb20ddc9132ed0465fbae933a994c869577dadf6d93ff07121496

在二进制的科学计数法中,规范化式的有效数应该大于或等于1且小于10(即十进制的2)。因此,在二进制的科学计数法中,下面这个数字:

$$
1 0 1 . 1 1 0 1
$$

其规范化式应该是:

$$
1 . 0 1 1 1 0 1 \times 2 ^ { 2 }
$$

这个规则暗示了这样一个有趣的现象:在规范化二进制浮点数中,小数点的左边通常只有一个1,除此之外没有其他数字。

当代大部分计算机和计算机程序在处理浮点数时所遵循的标准是由IEEE(Institute ofElectrical and Electronics Engineers,美国电气和电子工程师协会)于1985年制定的,ANSI(American National Standards Institute,美国国家标准局)也认可该标准。ANSI/IEEE Std754-1985 称作 IEEE 二进制浮点数算术运算标准(IEEE Standard for Binary Floating-PointArithmetic)——它只有18页——相对于其他标准来说是非常简短了,但却奠定了以简便方式编码二进制浮点数的基石。

IEEE浮点数标准定义了两种基本的格式:以4个字节表示的单精度格式和以8个字节表示的双精度格式。

让我们首先来了解一下单精度格式。它的4个字节可以分为三个部分:1位的符号位(0代表正数,1代表负数),8位用做指数,最后的23位用做有效数。下表给出了单精度格式的三部分的划分方式,其中有效数的最低位在最右边。

$$
\boxed { \begin{array} { c c } { s = 1 \textcircled { 1 } \acute { 2 } \acute { 1 } \acute { 9 } \acute { 5 } \boxed { \begin{array} { c c } { e = 8 \left. \acute { 1 } \acute { 2 } \acute { 1 } \acute { 9 } \acute { 3 } \acute { 5 } \acute { 5 } \right. } \\ { \left. \acute { 1 } \acute { 3 } \acute { 2 } \acute { 1 } \acute { 5 } \acute { 3 } \acute { 5 } \right. } \end{array} } } \end{array} } \left| \begin{array} { c c } { e = 8 \left. \acute { 1 } \acute { 2 } \acute { 1 } \acute { 5 } \acute { 2 } \acute { 5 } \acute { 5 } \acute { 5 } \acute { 5 } \right. } \\ { e = 2 3 \textcircled { 1 } \acute { 2 } \acute { 7 } \acute { 1 } \acute { 3 } \acute { 5 } \acute { 5 } \acute { 3 } \acute { 5 } \acute { 5 } \right. } \end{array}
$$

三部分共32位,也就是4个字节。我们刚才提到过,对于二进制科学计数法的规范化式,其有效数的小数点左边有且仅有一个1,因此在IEEE浮点数标准中,这一位没有分配存储空间。在该标准中,仅存储有效数的23位小数部分,尽管存储的只有23位,但仍然称其精度为24位。我们将在下面的内容里体会24位精度的含义。

8位指数部分的取值范围是0\~255,称为偏移(biased)指数,它的意思是:对于有符号指数,为了确定其实际所代表的值必须从指数中减去一个值—称做偏移量(bias)。对于单精度浮点数,其偏移量为127。

23 定点数和浮点数

373