浮点数的加法运算

浮点数的加法运算分以下五个步骤:

1、对阶:

这一点和十进制中计算指数一样,首先应该使指数化为相同的指数幂,例如:

x=3*10^4,y=4*10^3,则,x+y=3*10^4+0.4*10^4=(3+0.4)*10^4

二进制中也是如此:

x=.1010*2^10,y=.1100*2^01,则,x+y=.1010*2^10+.0110*2^10=(.1010+.0110)*2^10

2、尾数求和

即:(.1010+.0110)

3、规格化

(负数的补码在左侧补1值不变,正数的补码在左侧补0值bubi不变)

规格化分为左规和右规,左规:如果符号位与位数最高位相同则需要左规,不同则右规,

4、舍入

考虑尾数右移时丢失的数值位。舍入的方式有三种:1、舍0去1,有舍有入比较精确,实现时比较麻烦。2、截去法,直接截去丢失的数值。3、恒1法,直接在尾数最低位置1,有放大也有缩小,还算精确(0.0右移并用恒1法则变为1.对尾数进行了放大,1.1右移的话则变为1.尾数比原来变小)

5、检测溢出

 

例:

x=0.110100\times 2^{+010},y=(-0.101010)\times2^{+100}, solve : x+y?

解:阶码取3位,尾数取6位(均不包括符号位),机器表示的形式分别为

[x]_{CC}=0010\0110100 \par[y]_{CC}=0100\1010110 

(CC表示补码)

(1)、对阶:求阶差(两阶码的补码相减)

在机器运算中,符号位在表示时取1位,但是在运算的过程中则是取2位作为符号位

减00100就是加-00100的补码,即11100

\begin{array}{r} 00\,010\\ +\quad 11\,100\\ \hline 11\,110\\ \end{array}

其真值是-2,即x的阶码比y的阶码小2,故将x的阶码增大为0100,尾数右移两位变为0100 0001101

(2)、尾数向加

\begin{array}{r} 00\,001101\\ +\quad11\,010110\\ \hline 11\,100011 \end{array}

x,y相加的结果为:0100 1 100011

(3)、规格化

符号位与尾数最高位相同,即11.1或00.0,需要左规(符号位与尾数一同左移1位,阶码减1),所以结果应为:

如果符号位出现01.x或10.x则需要右规(符号位与尾数一同右移,阶码加1)

[x+y]补 = 0011 1 000110
x+y = (-0.111010)*2^(+011)

(4)、舍入

在对阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响精度,为此可用舍入法来提高尾数的精度。

例二:

浮点数x=0.1101*x^(+10), y=0.1011*2^(+01),求 x+y, 用0舍1入法。

解:
    阶码取2位,尾数取4位(均不包含符号位),机器的表示形式是:
    [x]补 = 010 0 1101
    [y]补 = 001 0 1011
  (1)、对阶
        00 10
      + 11 11
    ----------
        00 01
    故x的阶码比y的阶码大1,所以,y的阶码加1,尾数右移1位变为01011,用0舍1入法,       
    知,此时有[y]补 = 010 0 0110
  (2)、尾数向加
        00 1101
      + 00 0110
    ------------
        01 0011
  (3)、规格化
    尾数符号位为01,所以需要右规(尾数右移1位,阶码加1)
    [x+y]补 = 011 0 10011
    0舍1入后得到,[x+y]补 = 011 0 1010
    故:x+y = 01010*2^(+11)

 

  • 11
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,我会尽力回答你的问题。针对你的问题: (1) 将 A、B 表示为规格化浮点数形式 首先,我们需要将 A、B 转换为二进制数。A 的二进制表示为 1.111,B 的二进制表示为 -10.01。 接下来,我们需要将 A、B 转换为规格化浮点数形式。规格化浮点数形式的特点是尾数的最高位为 1,阶码需要根据科学计数法的规则来计算。 对于 A,我们把它写成科学计数法的形式:1.111 = 1.111 * 2^0。因此,A 的阶码为 0,尾数为 11100000。 对于 B,我们把它写成科学计数法的形式:-10.01 = -1.001 * 2^1。因此,B 的阶码为 1,尾数为 00100000。 因此,A 的规格化浮点数形式为 0 0000 0001 11100000,B 的规格化浮点数形式为 1 0000 0010 00100000。 (2) 实现浮点数加法运算 A+B,并写出用二进制编码表示的运算结果 在进行浮点数加法运算之前,我们需要将两个浮点数的阶码对齐。由于 A 的阶码为 0,B 的阶码为 1,我们需要将 A 的阶码加 1,即将 A 的尾数左移一位。 将 A 的尾数左移一位后,A 的规格化浮点数形式为 0 0000 0001 11000000。 现在,我们可以将 A 和 B 相加了。首先,我们需要确定两个浮点数的符号位。由于 A 和 B 的符号位都为 0,因此它们的和的符号位也为 0。 接下来,我们需要将 A 和 B 的尾数相加。由于 A 和 B 的阶码已经对齐,我们可以直接将它们的尾数相加。在相加时,我们需要将尾数右移一位,以便将进位加到阶码上。具体的计算过程如下: ``` 0 0000 0001 11000000 A +1 0000 0010 00100000 B ------------------ 1 0000 0010 11100000 和 ``` 接下来,我们需要将和的阶码计算出来。由于 A 和 B 的阶码已经对齐,因此和的阶码也等于 A 和 B 的阶码。在本例中,和的阶码为 1。 最后,我们需要对和的尾数进行规格化,即将尾数最高位的 1 移动到尾数的最高位。在本例中,和的尾数已经是规格化的了。 因此,A+B 的规格化浮点数形式为 0 0000 0010 11100000,转换为十进制数为 0.625。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值