浮点数的直观解释

对于一个给定的浮点数表示:在这里插入图片描述
假设这是一个规格化的单精度浮点数(S占用1bit, E占用8bit,M占用23bit),通常的解释是:

(-1)^S * 1.M * 2^(E-127)

如果我们把浮点数的表示看成这样的三个部分,可以得到一个更直观的解释:
在这里插入图片描述

符号位不变。对于指数部分,可以认为是一个窗口,这个窗口边界由两个连续的2的幂的整数构成。尾数部分则认为是窗口中的偏移。

窗口表示了这个浮点数将会落在那两个整数中间:[0.5,1], [1,2], [2,4], [4,8]直到[2^127,2^128]。偏移则将窗口分成了2^23 = 8388608个片段。使用窗口和偏移你就可以近似一个值。窗口是一个防止溢出的优秀机制。一旦到达窗口的上界(比如[2,4]),就可以浮动到右边另一个更大范围的窗口中(比如[4,8])。只是在窗口变大两倍的同时精度有所丢失。

举例说明一下,下面使用这种模型将3.14编码为浮点数表示。

  • 3.14是正数,所以S = 0
  • 3.14位于2和4之间那么窗口下界是2^1 -> E=128(参见公式中窗口的值是2^(E-127))
  • 2^23个偏移量可以用来表示3.14落在区间[2-4]哪个地方。由于这个数在区间的((3.14-2)/(4-2)=0.57)位置,所以偏移量是M = 2^23 * 0.57 = 4781507

这几个数转化成二进制是:

  • S = 0 = 0b
  • E = 128 = 10000000b
  • M = 4781507 = 10010001111010111000011b

在这里插入图片描述

因此3.14这个值的近似表示是3.1400001049041748046875
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值