2.3.1 浮点数的表示范围

任意一个浮点数可用两个定点数表示,用定点小数表示浮点数的尾数,用定点整数表示浮点数的阶。阶的编码称为阶码,为便于对阶,通常采用移码形式。

表示浮点数的两个定点数位数有限,因而浮点数的表示范围有限。以下例子用于说明可表示浮点数位于数轴上的位置。

例2.21 将十进制数65798转换为32位浮点数格式。

其中,第0位为数符S;第1~8位为8位移码表示的阶码E(偏置常数为128);第9~31位为24位二进制原码小数表示的尾数。基数为2,规格化尾数形式为±0.1bbb,其中第一位“1”不明显表示出来,这样可用23个数位表示24位尾数。

解:因为(65798)10=(1 0000 0001 0000 0110)2=(0.1 0000 0001 0000 0110)2×217,所以数符S=0,阶码E=(128+17)10=(10010001)2

故65798用该浮点数形式表示如下。

用十六进制表示为4880 8300H。

上述格式的规格化浮点数的表示范围如下。

• 正数最大值:0.11…1×211…1=(1-2-24)×2127

• 正数最小值:0.10…0×200…0=(1/2)×2-128=2-129

因为原码是对称的,所以该浮点格式的范围关于原点对称,如图2.3所示。

图2.3 规格化浮点数的表示范围

在图2.3中,数轴上有4个区间的数不能用浮点数表示。这些区间称为溢出区,接近0的区间为下溢区,向无穷大方向延伸的区间为上溢区

根据浮点数的表示格式,只要尾数为0,对于任意阶码,其值均为0,这样的数称为机器零,因此机器零的表示不唯一。通常,用阶码和尾数同时为0表示机器零。当结果出现尾数为0时,不管阶码为何值,都将阶码取为0。机器零有+0和-0之分。