一个网站,理解IEEE754标准和精度问题

首先进入这个网站
在这里插入图片描述

格式

网站遵循IEEE754标准来进行32位浮点数的进制转换, 输入为二进制也就是内存中所存储的数位
即:

  • 1位符号位(Sign)
  • 8位指数位(Exponent)
  • 23位小数位(Mantissa)

存储规则

规约数

  • 小数位存储的是规格化后小数点右边的数位,也就是所谓的隐藏一位整数位1
  • 实际指数值等于指数位减去32位格式下偏移值(127)

观察上面的图片可以看见小数位全部置0而(value)一栏显示的实际尾数值是1
再观察指数一栏,此时指数位01111111,输入127,实际指数值就是127-127(偏移值)= 0
所以此时10进制表示(Decimal representation)就是 1x1x(20)= 1
这里再补充一下浮点数真值的运算规则
浮点数真值 = 符号位 × 尾数 × ( 2 阶码 ) 浮点数真值=符号位\times尾数\times(2^{阶码}) 浮点数真值=符号位×尾数×(2阶码)

非规约数

非归约数是为了能够表示出接近0的极小值,存储规则为:

  • 指数位始终为0,偏移值取为126,实际上就是固定了指数为 -126,这是为了实现渐进式下溢
  • 隐藏的整数位是0
  • 小数位非0

特殊值

有三个特殊值需要指出

  1. 指数位全0且小数位全为0,真值为 ± 0 \pm0 ±0
  2. 指数位全为1且小数位全为0,真值为 ± ∞ \pm\infty ±
  3. 指数位全为1且小数位不全为0,表示非数NaN(Not a Number)

精度

回归正题
关于32位浮点数只能表示7位有效数字
在上面的网站中,先存储一个1024
在这里插入图片描述
此时1024整数部分已经占据了4位有效数字位,现在假设我们要表示一个离1024最近的数,自然是在小数最低位上微调一个1,可以只看10进制栏中的截断值,重点关注小数点后4位
在这里插入图片描述
可以把这个1等同于步长,很显然,接下来我们要表示离现有的1024.00012207最近的数唯一的选择就是继续增加步长来获得下一个能被计算机存储的浮点数,继续在小数位上增加1
在这里插入图片描述
此时10进制截断值为1024.00024414,此时就已经可以发现,计算机并不能完全表示我们这一步所跨过的值而只能知道我们落在哪里,也就是说从1024.00012207到1024.00024414之间的值都是无法储存的,这就是所谓的精度丢失,而目前似乎后4位仍然安全,1024.001到1024.002仍然能满足我们的千分位精度需求,但只是暂时的,继续增加步长,在小数部分从4走到5时千分位也会离我们而去,因为1024.005也被抛弃了
不难得出,23位小数位将能使我们总共走 2 23 2^{23} 223步,计算机只能记住每一步的落点,在小数位走完后唯一的选择就是向指数位进位来进入下一个数值区间,这就能解答经典的0.99999999=1了
在这里插入图片描述
(当整数位为0时似乎有效数字位是不包括整数位的)
实际上尾数永远都在[1,2)区间里(规约数前提下),指数位有能力放大缩小这个区间,相应的区间端点也会变化,但是power都是有条件的,区间范围越大,每步差值就越大,因为我们始终都只能走 2 23 2^{23} 223
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值