计算机组成原理之浮点加减

进行浮点加减法运算时,需要完成操作数检查,对阶,尾数求和,结果规格化,舍入处理,溢出处理等步骤。
这里介绍几个概念:
双符号位:是检查计算机运算溢出的。是采用双符号位。00表示正号,11表示负号。
如果最高位进位讲导致符号位不一致。
结果的符号位有两种01和10.
结果的符号位为01时:为上溢
结果符号位为10时:为下溢

产生下溢的时候是接近0的时候被四舍五入为0的时候
产生上溢的时候是很大的数字被近似为正无穷或者负无穷。

比如这个例子:
例如设X = + 1000001,Y = + 1000011,采用双符号位表示X=00 1000001,Y=00 1000011,[X + Y]补=01 0000100,01运算结果产生了正溢出。
那么什么时候会产生溢出呢?
当两个同符号的数相加(或者是相异符号数相减)时,运算结果有可能产生溢出。常用的溢出检测机制主要有进位判决法和双符号位判决法。
再比如相异符号数相减时:
设x=0.1101,y=-0.0111,符号位为双符号位 ,用补码求x-y
[x-y]补=[x]补+[-y]补=00 1101+00 0111=01 0100 结果错误,正溢出

浮点数的常用表示方法:
N = R^E * M
N为浮点数,R为基底,E为阶码,M为尾数。

比如:
2为R,基底,010为E,阶码,0.11011011为M,尾数

浮点数加减法运算的时候均用补码形式。因为计算机内部都是采用补码形式。
变形补码。因为原码看不出来正数负数。
补码可以识别正数和负数。
这里采用的都是符号位两位,阶码双符号位,尾数双符号位。(上面说的)

1.对阶
就是把阶码小的转换为阶码大的。小阶向大阶看齐。
如1.1 * 2 ^ 3 和 1.2 * 2 ^ 4
就是把1.1*2^3,把尾数右移一位。阶码加1。
比如:

这里采用补码表示:
阶码双符号位表示:
[X]浮 = 00 010
[Y]浮 = 00 100
尾数双符号位表示:
[X]浮 = 00.11011011
Y的原码:11.10101100
Y的反码:11.01010011
Y的补码:11.01010100
[Y]浮 = 11.01010100

Y的阶码:
这里相减相当于加上负数
[-Y]原 = 11 100
[-Y]反 = 11 011
[-Y]补 = 11 100
我们把阶码对阶。就是E = Ex - Ey = 00010 + 11 100 = 11 110
把这个补码转换为原码得:11 010
即为-2
那么是X的阶码小,将X的尾数右移两位,X的阶码加2
所以[X]浮 = 00100,00.00110110(11)

2.尾数求和

如果是相减的化,相当于加上减数的相反数。就是把减数转化为对应的相反数的补码相加即可

3.规格化
分为右规和左规
两个符号位不同的时候右规。就是我上面说的情况除了00或者11其余是符号位不相同的情况。
即01 …和 10 …
以上两种情况将其右移。
即01…右移一位是001…
即10…右移一位是110…
然后阶码加1

两个符号位相同但是最高位的数值与符号位相同就是左规
两种情况就是111…和000…
111…左移1位的结果为11…0
000…左移1位的结果为00…0
然后阶码需要减去移动次数。

上述式子需要左规

左移1位阶码减1
变为:
1.00010101(10)
阶码减1

4.舍入
舍入有0舍1入法,恒舍法,置1法

比如上式采用0舍1入法
因为

最高位为1
需要入1
为:

如果需要被舍去的最高位为0,那么直接舍去就可以了

5.判断溢出
阶码的符号位为00或者01则不溢出
只需要判断阶码是否溢出即可,尾数不需要判断溢出。只是当前不是规格化数而已
判断阶码溢出方式上面已经提到
01为上溢。置溢出标致
10为下溢。置运算结果为0,阶码和尾数均为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值