单精度浮点数的有效表示范围。
如前所述,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