浮点数(二)
四、二进制浮点数大小比较二进制浮点数大小比较,先比较符号,再比较指数,最后比较小数。
1.一个正浮点数和一个负浮点数的大小比较
X = 0 0111 1101 0000 0000 0000 0000 0000 0002 = 0.2510
Y = 1 0111 1111 1100 0000 0000 0000 0000 0002 = -1.7510
因为X为正数,Y为负数,所以X>Y。
2.两个正浮点数的大小比较
两个正浮点数大小比较时,可以直接比较指数,指数大的数大;如果指数相同,比较小数,小数大的数大。
X = 0 0111 1110 1100 0000 0000 0000 0000 0002 = 0.87510
Y = 0 0111 1111 1000 0000 0000 0000 0000 0002 = 1.510
X的指数部分为0111 1110小于Y的指数部分0111 1111,所以X<Y。
X = 0 0111 1111 1100 0000 0000 0000 0000 0002 = 1.7510
Y = 0 0111 1111 1000 0000 0000 0000 0000 0002 = 1.510
X、Y的指数部分相同,所以需要比较小数部分;X的小数部分为1100 0000 0000 0000 0000 000大于Y的小数部分1000 0000 0000 0000 0000 000,所以X>Y。
3.两个负浮点数的大小比较
两个负浮点数的大小比较,先比较两个浮点数的绝对值(绝对值的比较与两个正浮点数的大小比较相同。),然后再将比较结果取反。
X = 1 0111 1111 1100 0000 0000 0000 0000 0002 = -1.7510
Y = 1 0111 1111 1000 0000 0000 0000 0000 0002 = -1.510
所以X<Y。
五、浮点数的值域
IEEE 754浮点标准中,偏置指数E应包括以下部分:
1、1到(28-2)之间的所有整数,包括1和(28-2),用以编码规格化数。
2、保留值0,用以编码±0和次规格化数。
3、保留值(28-1),用以编码±∞和NaNs。
浮点数X的值可以从组成字段推算得出:
a)如果E=(28-1),并且T≠0,X为NaN,并且与S无关。
例如:0 1111 1111 1000 0000 0000 0000 0000 0002表示NaN,即非数值。
b)如果E=(28-1),并且T=0,X为(-1)s×∞。
例如:0 1111 1111 0000 0000 0000 0000 0000 0002表示+∞,即正无穷大。
1 1111 1111 0000 0000 0000 0000 0000 0002表示-∞,即负无穷大。
c)如果1≤E≤(28-2),X为规格化数,T字段小数点的左边存在一个隐藏的1。
例如:最小规格化数 0 0000 0001 0000 0000 0000 0000 0000 0002 = 2-126
最大规格化数 0 1111 1110 1111 1111 1111 1111 1111 1112 = 2127(2-2-23)
d)如果E=0,并且T≠0,X为次规格化数,T字段小数点的左边存在一个隐藏的0。
例如:最小次规格化数 0 0000 0000 0000 0000 0000 0000 0000 0012 = 2-126(2-23) = 2-149
最大次规格化数 0 0000 0000 1111 1111 1111 1111 1111 1112 = 2-126(1-2-23)
e)如果E=0,并且T=0,X为(-1)s×0。
例如:0 0000 0000 0000 0000 0000 0000 0000 0002表示+0。
1 0000 0000 0000 0000 0000 0000 0000 0002表示-0。
完整的浮点数的值域如下图所示:
其中:红色部分会发生下溢异常,数值范围为-2-149<X<0和0<X<2-149。
蓝色部分为次规格化数,数值范围为-2-126(1-2-23)≤X≤-2-149和2-149≤X≤2-126(1-2-23)。
绿色部分为规格化数,数值范围为-2127(2-2-23)≤X≤-2-126和2-126≤X≤2127(2-2-23)。
紫色部分会发生溢出异常,数值范围为X<-2127(2-2-23)和X>2127(2-2-23)。