浮点数加减运算过程:对阶、尾数运算、规格化、舍入和判溢出

时间:2024-03-29 15:26:44
例如:两浮点数x=0.1101*201,y=(-0.1010)*211,求x+y

一、 对阶

1、求补码

[x]=00,01;00.1101,[y]=00,11;11.0110;

2、求阶差

小阶向大阶对阶,同时尾数右移,移动位数为阶差。
00.11-00.01=00.10=2,故阶差为2,故[x]’=00,11;00.0011

二、尾数求和

将对阶后的两个尾数安定点加减运算规则进行运算。
上述对阶后得:[x]’=00,11;00.0011;[y]=00,11;11.0110;
则[Sx+Sy]=00.0011+11.0110=11.1001。故[x+y]=00,11;11.1001。

三、规格化:

(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) 右规

当尾数出现01.xx…x或10.xx…x时表示尾数溢出,需要进行右归,右归时尾数右移,阶码加1.
例:已知浮点数x=0.1101x210,y=0.1011x201,求x+y

  • 1、对阶
  • 2、尾数求和
  • 3、尾数求和
  • 求和结果为 [x+y]=00,10;01.0010;

故需要进行右规,尾数向右移动一位,阶码加1得:[x+y]=00,11;00.1001;则x+y=0.1001x211

四、舍入

(1)"0舍1入"法

"0舍1入"法类似与十进制的四舍五入法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位位1,则在尾数的末位加1,这样做可能使得尾数又溢出,此时需再做一次右规。

(2)"恒置1"法

尾数右移是不论丢掉得最高数值位是1或0,都使右移后得尾数末尾位恒置1。

例:设x=x-101x(-0.101000),y=2-100x(+0.111011),并假设阶符取2位,阶码得数值部分取3位,数符取2位,尾数得数值部分取6位,求x-y;

解: 由题可得:[x]=11,011;11.011000,[y]=11,100;00.111011;

  • 1、对阶
  • 11,100-11,011=00.001=1。故x得尾数右移1位,阶码加1,即
  • [x]=11,100;11.101100
  • 2、求和
  • [Sx]- [Sy]= [Sx]+ [-Sy]=11.101100+11.000101=10.110001

注意:Sy=>-Sy;连同符号位取反,末尾加1。

  • 尾数符合位出现10,需要右规
  • 3、规格化
  • 尾数右移,阶码加1,右规后得[x-y]=11,101;11.011000 1
  • 4、舍入处理
  • 采用0舍1入法,其尾数右规时末位丢1,再+1,得:[x-y]=11,101;11.011001

浮点数加减运算过程:对阶、尾数运算、规格化、舍入和判溢出