计算机用二进制来表示数字,浮点数也是如此: 首先了解如何用二进制表示小数(也就是如何把十进制小数转化为二进制表示): 举一个简单例子,十进制小数 10.625 1)首先转换整数部分:10 = 1010b 2)小数部分0.625 = 0.101b (用“乘2取整法”:0.625*2=1.25,得第一位为1,0.25*2=0.5,得第二位为0,0.5*2=1, 得第三位为1,余下小数部分为零,就可以结束了) 3)于是得到 10.625=1010.101b 换个表示方式更加深入理解: 1*(10^1)+0*(10^0)+6*(10^-1)+2*(10^-2)+5*(10^-3) = 1*(2^3) + 0*(2^2) + 1*(2^1) + 0*(2^0) + 1*(2^-1) + 0*(2^-2) + 1*(2^-3) 4) 类似十进制可以用指数形式表示: 10.625=10625*(10^-3) 所得的二进制小数也可以这样指数形式表述: 1010.101b=1010101 * (2^-3) 也就是用有效数字a和指数e来表述: a * (2^e) 用一个32bit的空间(bit0~bit31)来存储这么一个浮点数,如此分配存储空间: bit0 ~ bit22 共23bit,用来表示有效数字部分,也就是a,本例中a=1010101 bit23 - bit30 共8个bit,用来表是指数,也就是e,范围从-128到127,实际数据中的指数是原始指数加上127得到的,如果超过了127,则从-128开始计,所以这里e=-3表示为124 bit31 为符号位,1表示负数,这里应该为0 把上述结果填入32bit的存储器,就是计算机表示小数10.625的形式。 注意这个例子的特殊性:它的小数部分正好可以用有限长度的2进制小数表示,因此,而且整个有效数字部分a的总长度小于23,因此它精确的表示了10.625,但是有的情况下,有效数字部分的长度可能超过23,甚至是无限多的,那时候就只好把后面的位数截掉了,那样表示的结果就只是一个近似值而非精确值;显然,存储长度越长,精度就越高,比如双精度浮点数长度为64位,1位符号位,11位指数位,52位有效数字。
浮点数在计算机中的保存
最新推荐文章于 2023-12-28 09:18:44 发布