有效位数之浮点数存储

        众所周知,浮点数的有效位数是6-7位,为什么有该结论,需要从它的存储结构说起。IEEE 754标准进行存储定义了其格式:

第一段 占 1bit,表示符号位。代称为 S(sign)

第二段 占 8bits,表示指数。代称为 E(Exponent)。

第三段 占 23bits,表示尾数。代称为 M(Mantissa)。

S: 符号位 0代表正数 1代表负数

E: 指数位 对于任何数来说 都可以满足   

M: 尾数位 也就是小数位,但是这里叫偏移量可能好一些 根据上面二进制转换来说的话

举例:3.14

(3.14 - 2) / (4 - 2) = 0.57, 而 0.57∗2^23=4781506.56 四舍五入 也就4781507 (上面其实也四舍五入了) 在转为二进制

最后 3.14 的二进制表示

我们再用 IEEE 754 的那个算式来算一下:

这个时候 就发现精度丢失了。

另:

1、为什么减去127

计算机表示单精度浮点数时,是用8位去存储指数部分(见上图E8bit),在数值上面,表示0~255(全表示正数,无法表示负数,),但是指数同样有负数的情况,如果用8位去表示正负数的话,最小是8位负数(含符号位)即1 1111111(最左边是1,表示负数),1 1111111(转换为十进制为-127),即0的左边是127个数,表示负数,因为总共有255个数(0~255),故0的右边只能有255-127=128,转换为二进制是1 000 0000;又因为浮点数的指数在存储时只能存储不能带符号的数(无符号数),所以把-127~128区间的数转化为一个正数那就好了,于是就出现了在计算机存储之前将浮点数指数的基础上加上127,即可满足指数都会变成正数的情况

2、当E全为0时:

这时指数E等于1-127为真实值,M不再加上舍去的1,而是还原为0.xxxxxxxx小数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值