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

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

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

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

单精度浮点数的有效表示范围。

如前所述,10位二进制数可以近似地用3位十进制数来表示。其含义是,如果把10位都置为1,即十六进制的3FFh或十进制的1023,它近似等于把十进制数的3位都置为9,即999,可以表示为下面的约等式:

$$
2 ^ { 1 0 } \approx 1 0 ^ { 3 }
$$

两者之间的这种关系意味着:单精度浮点数格式存放的24位二进制数大体上与7位的十进制数相等。因此,可以说单精度浮点格式提供24位的二进制精度或者7位的十进制精度。其深层的含义是什么呢?

当我们查看定点数时,其精确度是很明显的。例如,当我们表示钱款时,采用两位定点小数就可以精确到美分。但是对于采用浮点格式的数,就不能如此肯定了。其精确度依赖于指数的值,有时候浮点数可以精确到比美分还小的单位,但有时候其精确度甚至达不到美元。

这样说可能更合适:单精度浮点数的精度为 $1 / 2 ^ { 2 4 }$ ,或1/16777216,或百万分之六,但其真正的含义是什么呢?

首先,这意味着在单精度浮点格式下,16,777,216和16,777,217将表示成同一个数。不仅如此,处于这两个数之间的所有的数(例如,16,777,216.5)也将被表示成同一个数。所以上面提到的3个十进制数都按32位单精度浮点数:

4B800000h

来存放。将该数按符号位、指数位和有效数位划分,可以表示为:

$$
0 \ 1 0 0 1 0 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
$$

也就是:

$$
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 _ { 2 } \times 2 ^ { 2 4 }
$$

下一个二进制浮点数可表示的最大有效数是16,777,218,即:

$$
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 1 _ { 2 } \times 2 ^ { 2 4 }
$$

23 定点数和浮点数

3754