例如:两浮点数x=0.1101*201,y=(-0.1010)*211,求x+y
一、 对阶
1、求补码
[x]补=00,01;00.1101,[y]补=00,11;11.0110;
2、求阶差
二、尾数求和
三、规格化:
(1) 左规
尾数出现00.0xx…x或11.1xx…x时需要进行左规,左规时尾数左移一位,阶码减一,直到成为:00.1xx…x或11.0xx…x。一句话就是尾数第一位和符号位相同。
如上例求和结果为:
[x+y]补=00,11;11.1001;
故将其尾数左移一位,阶码减1得:
00,10;11.0010;
规格化后这是补码,求其尾数的原码即可,故结果为
x+y=(-0.1110)*2+10
(2) 右规
- 1、对阶
- 2、尾数求和
- 3、尾数求和
- 求和结果为 [x+y]补=00,10;01.0010;
故需要进行右规,尾数向右移动一位,阶码加1得:[x+y]补=00,11;00.1001;则x+y=0.1001×211
四、舍入
(1)”0舍1入”法
“0舍1入”法类似与十进制的四舍五入法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位位1,则在尾数的末位加1,这样做可能使得尾数又溢出,此时需再做一次右规。
(2)”恒置1″法
尾数右移是不论丢掉得最高数值位是1或0,都使右移后得尾数末尾位恒置1。
例:设x=x-101x(-0.),y=2-100x(+0.),并假设阶符取2位,阶码得数值部分取3位,数符取2位,尾数得数值部分取6位,求x-y;
解: 由题可得:[x]补=11,011;11.011000,[y]补=11,100;00.;
- 1、对阶
- 11,100-11,011=00.001=1。故x得尾数右移1位,阶码加1,即
- [x]补=11,100;11.
- 2、求和
- [Sx]补– [Sy]补= [Sx]补+ [-Sy]补=11.+11.000101=10.
注意:Sy=>-Sy;连同符号位取反,末尾加1。
- 尾数符合位出现10,需要右规
- 3、规格化
- 尾数右移,阶码加1,右规后得[x-y]补=11,101;11.011000 1
- 4、舍入处理
- 采用0舍1入法,其尾数右规时末位丢1,再+1,得:[x-y]补=11,101;11.011001

欢迎关注公众号:理木客

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230067.html原文链接:https://javaforall.net
