【cs基础】浮点数的存储

浮点数的存储

为什么讨论浮点数

  • 计算机只能识别二进制,整数转化为二进制没有任何问题。
  • 但是!浮点数有小数点, 计算机怎么识别!必然要有个规范来规定计算机怎么识别吧!这个规范就是国际标准IEEE 754.

浮点数的识别规范

  • 标准规定,任何浮点数的表现形式为

    • V= (-1)^S x M x 2^E
    • 符号位S
    • 尾数位M
    • 指数位E
  • 32bit : 符号位1,指数位8,尾数位23

  • 64bit : 符号位1,指数位11,尾数位52

  • 尾数位 M 默认总是1.xxx的形式,秉着优化的概念,标准规定保存的时候可以舍弃,读取的时候再加上,这样尾数范围也增加了 1 位

  • 指数位2^E , E为8,指数范围0~255; E为11,指数范围 0~2047

  • 但是!指数E可能为负数 也就是说指数范围可能为-127-128了,为了不出现负数,标准规定采用移位存储,保存的E数据就要+127或者+1023;
  • 比如E = 10,必须保存成10+127=137,即10001001

(1)E不全为0或不全为1。这时,浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。
(2)E全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
(3)E全为1。这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。

单精度和双精度误差

  • 十进制转化为二进制的时候,要是永远除不尽,单精度转换为双精度的时候,位数变少,多余的值被省忽略了,就会产生误差的问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值