转自:补码表示的浮点数的规格化及示数范围
一、规格化
对二进制浮点数N = m x rm ^ e(rm为尾数的基),若尾数m满足1/2≤|m|<1,即尾数最高位数字为“1”,则为规格化的数。
对补码来说:如果是正数,尾数的最高位为“1”;如果是负数,尾数的最高位应为“0”(即1.0x...x),或为“1”而以后各位全为“0”(即1.10...0)。前者小于-1/2,后者正好等于-1/2。
为了机器判断方便,在补码表示中,往往不把-1/2列入规格化的数。这样,补码规格化数规定如下:
对正数m ≥ 0,如果 1 > m ≥ 1/2,称为规格化数,其补码表示形式为:0.1x...x ;对负数x<0,如果 -1/2> m ≥ -1(注意:补码表示的时候可取-1),称为规格化数,其补码表示形式为:1.0x...x。 其中x表示可任取“0”或“1”。
因此,机器只要判断运算结果的符号位与第一位数字是否相同,便可知道是否是规格化的数。
二、示数范围
1个浮点数需要用以下6个参数来表示:
* 尾数的基rm。在不同的数制中,可以分别取值为 rm = 2、4、8、16、10。
* 尾数的值m。
* 尾数的长度p。p的值与尾数采用的基rm有关,p位长的尾数的rm进制数的尾数为p' = p / [ log2(rm) ]。
* 阶码的基re。一般取re = 2。
* 阶码的值e。
* 阶码的长度q。由于re = 2,因此q的值就是e的二进制数的位数。
(1)当尾数的值m采用原码表示时,规格化浮点数N的示数范围为
(rm ^ (-1)) x (rm ^ ( - re ^ q)) ≤ N ≤ (1 - rm ^ ( -p')) x (rm ^ ( re ^ q -1))
(2)当尾数的值m采用补码表示时,规格化浮点数N的示数范围在正数区间与m采用原码表示时相同,在负数区间的示数范围为
- (rm ^ (re ^ q -1)) ≤ N ≤ - (rm ^ (-1) + rm ^ (-p)) x (rm ^ ( - re ^ q))