Note230902浮点数存储

1、浮点数的表示方法

国际标志IEEE(电器和电子工程协会)754标准:任意一个二进制浮点数V可以表示为

(-1)^S * M * 2^E(科学计数法)

  • (-1)^S表示符号位。当S=0时,V为正数;当S=1时,V为负数
  • M表示有效数字,1<=M<2
  • 2^E表示指数位

例如:十进制5.0

-> 101.0

-> 1.01*2^2

-> (-1)*0 * 1.01*2^2

-> S=0, M=1.01, E=2

2、浮点数的不精确存储

二进制的数据小数点后各位的权重是2^-1, 2^-2, 2^-3, ...

因此,在十进制下有穷位的小数,在二进制下不一定是有穷位的;在十进制下能精确表示的小数,在二进制下也不一定能精确表示

例如:V=9.6f

->1001.100000......

3.存储方式

国际标志IEEE(电器和电子工程协会)754标准:

1.二进制表示

对于32位(4byte)的单精度浮点数

  • 最高的1位是符号位S
  • 接着的8位是E
  • 剩下的23位为有效数字M

对于64位(8byte)的双精度浮点数

  • 最高的1位是符号位S
  • 接着的11位是E
  • 剩下的52位为有效数字M

2.对于M:


M总是写成1.xxxxxx的形式,所以保存M时,会默认M的第一位是1,然后舍去这一位

等到读取的时候,才把第一位的1加上去

这样就能节省1位有效数字

3.对于E:

(1)存入

E是一个unsigned int

这意味着,如果E是8位,取值范围则为0~255;如果E是11位,取值范围为0~2047

但是E是可以出现负数的

所以IEE 745规定,将E存入内存前,必须先给真实值加上一个E的取值范围的中间数。对于8位的E,这个中间数是127;对于11位的E,这个中间数就是1023

(2)取出

  • E全为0:E=1-127 or 1-1023,M不再给上第一位的1,而是还原为0.xxxxx的小数,这样做是为了表示+-0,以及接近于0的很小的数字
  • E全为1:如果M=0,表示+-无穷大
  • E不全为0或不全为1:分割,读取S,E,M,还原E,M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值