浮点数相加实例

文章状态:

  • 修复中
  • 待改善,但能用 (feat: 需要增加一个更全面的例子)
  • 已修复

规定浮点数的符号位为1位,指数位为3位,尾数位为5位,现有两个浮点数:1.2513.5

  • 1.25浮点数表示为二进制格式:0 011 01000
  • 13.5浮点数表示为二进制格式:0 110 10110

小小验算一下:

  • 0 011 01000 表示一个正数,指数位为3(移码 bisas=3),故实际exp=0,1.01000B * 20 = 1.01000B = 1.25
  • 0 110 10110 表示一个正数,指数位为6,减去偏置得到实际exp=3,1.10110B * 23 = 1101.10B = 13.5

现在要计算1.25+13.5,可按以下步骤计算:

一. 对阶

首先,指数位要相同才可进行尾数位的相加。指数位的相同可通过Δ来调节,其中Δ=|exp-exp|。1.25和13.5的Δ为|110B-011B| = |6-3| = 3,将1.01000 * 20 表示为 0.00101 * 23

为什么不是把13.5 的阶码110 变为011?如果由110 变为011,则13.5 的尾数部分就需要左移,而左移的对象几乎包含所有高位,相较于右移包含低位,对浮点运算的影响更大。

二. 尾数加减运算

现在1.25尾数表示为00101
       13.5尾数表示为10110

尾数运算:
在这里插入图片描述
相加后得到的真实结果就是:1.11011 * 23 = 1110.11B = 14.75 D,这和手算的结果是一致的。

三. 运算结果规格化

所谓规格化就是在尾数相加完毕之后,有可能无法满足1.M的表示方式(比如尾数产生进位,那么隐式小数点前面的数就变成了10),规格化就是将计算之后的数重新转化为1.M的正确表示方式。

由于现在得到的浮点结果就是规范数,所以此步不需要进行规范化。

四. 舍入处理

一般计算机采用先偶数舍入(也称向最接近的值舍入),本例运算的所有结果可以在9 位bit 范围内表示,因此无需考虑舍入处理。

五. 溢出判断

这次运算并阶码exp 没有发生溢出,因此这一步也是不需要进行任何操作的。

因此,最终得到的结果,表示为:0 110 11011


参考文献:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值