浮点数溢出

1. 问题

什么是浮点数的溢出?什么情况下发生上溢出?什么情况下发生下溢出?

2. 解析

浮点数的运算结果可能出现一下四种情况:

  • 阶码上溢出
  • 阶码下溢出
  • 尾数溢出
  • 非规格化尾数
  1. 首先,阶码上溢出。正指数(即阶码值)超过了最大允许值。比如阶码用8bit移码表示,正指数却有128,即无法表示(8bit移码中真值表示范围为-126~127,-127的阶码全0表示非规格化数;而-128的阶码全1,表示无穷大)即上溢出。 如果结果为整数,则称为正上溢出;如果结果为负数,则称为负上溢出。这种情况为软件故障,需要引入溢出故障处理程序来处理。

  2. 阶码下溢出,一个负指数比最小所允许的数值还要小时,发生下溢出,例如上面例子中用阶码表示-130,小于真值表示范围的最小值,发生下溢出。一般机器把下溢出时的值置为0.

  3. 尾数溢出,当尾数中最高有效位发生进位时,发生尾数溢出。(即尾数的bit位表示不下尾数值)此时,需要进行 “右规格化”操作:尾数右移一位,阶码加1,直到尾数不再溢出。不过右移过程中可能会舍入,引起误差。

  4. 非规格化尾数,当数值部分高位不是有效值时,例如:

    • 尾数用原码表示则尾数最高数值位必须为1
    • 尾数用补码表示则符号位必须与最高数值位相反

    此时需要进行“左规格化”操作:尾数左移一位,阶码减1,直到尾数为规格化为止。

3. 总结

浮点数溢出最终都可以归一成阶码溢出,比如情况3和情况4,通过规格化操作进行算数移位来增减阶码,如果阶码变动之后,大于阶码表示范围的最大值,则是上溢出;小于阶码表示范围的最小值,则是下溢出。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值