信息的表示与存储 - 浮点数的表示
定点表示法
定点表示法,即约定机器中所有数据的小数点位置是固定不变的。在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数。
对于定点小数约定的小数点位置在符号位之后、有效数值部分最高位之前。如果[xw , xw-1 , xw-2 , … , x2 , x1 , x0]表示定点小数,则xw为符号位, xw-1 , xw-2 , … , x2 , x1 , x0是数值的有效部分,也称为尾数。
一般说来,如果最末位xn= 1,前面各位都为0,则数的绝对值最小,即|x|min= 2^(-n)。如果各位均为1,则数的绝对值最大,即|x|max=1-2^(-w)。所以定点小数的表示范围是:2^(-w)≤|x|≤1 -2^(-w)
目前,计算机多采用的是定点整数,定点小数主要用在早期的计算机中,它最节省硬件。
浮点数的表示
浮点表示法类似于科学计数法,它把一个数的有效数字和数的范围分开表示,相当于数的小数点位置随着不同的比例因子而在一定范围内可以自由浮动,故而得名。
使用科学记数法,任意一个十进制数可表示为(),其中一个因数为a(1≤|a|<10),另一个因数为10^n。
同样在计算机中我们可以将任意进制的数写成,其中M是浮点数的尾数,是一个定点小数,e是比例因子的指数,成为浮点数的指数,是一个整数,通常比例因子R=2,不需要使用单独的位去存储。
IEEE754二进制浮点数算术标准
符号位sign S是浮点数的符号位(0正,1负),占一位,在最高位。
尾数significand M是一个二进制定点小数,它的表示范围是情况而定
阶码exponent E的作用是对浮点数加权,为2的E次幂
对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。
对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。
ps:一般情况下,最低有效位在最左侧。
指数偏移值(exponent bias)
指数偏移值(exponent bias),是指浮点数表示法中的指数域的编码值为指数的实际值加上某个固定的值,IEEE 754标准规定该固定值为Bias=2^(k-1)-1,其中的k为存储指数的比特的长度。
假设我们用E表示浮点数阶码的真实值,e表示浮点数计算值;M表示浮点数尾数的真实值,f表示浮点数尾数位的值,其含义是0.f,小数点在尾数最高有效位的左边。
规格化表示
如果浮点数中指数部分的编码值既不是全0,也不是全1,那么这种情况下就是规格化表示。在这种表示中,E=e-Bias,M=1.f,因为分数 (fraction) 部分最高有效位(即整数字)总是1,这个1在表示的时候就可以省略。
例如:浮点数x的754表示(42C80000)16,可以推导出其十进制表示。
其二进制表示为(0100 0010 1100 1000 0000 0000 0000 0000)2,阶码
包括1的尾数M=1.100 1000 0000 0000 0000 0000=1.1001
所以
非规格化表示
如果浮点数中指数部分的编码值是全0,就是规格化表示。在这种表示中,E=1-Bias,M=0.f。这样做是为了表示±0(规格化表示中M>=1,无法表示0),以及接近于0的很小的数字。
其他数字
指数部分的编码值全为1。
如果有效数字M全为0,表示±无穷大(正负取决于符号位s);
如果有效数字M不全为0,表示这个数不是一个数(NaN)。
参考资料
版权声明: 本文为 InfoQ 作者【引花眠】的原创文章。
原文链接:【http://xie.infoq.cn/article/5c6d56a1ffd56bc91d6560e13】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论