步骤如下:
1.对阶
对阶目的是使阶码相同,遵循阶码小的向阶码大的看齐,使阶码小的尾数右移,每右移一位(右移相当于除2,左移相当于乘2),阶码加
1
1
1
举个例子:
两浮点数:
X
=
0.1101
×
2
01
X = 0.1101 \times 2 ^{01}
X=0.1101×201 ,
Y
=
(
−
0.1010
)
×
2
11
Y = \left( -0.1010 \right) \times 2 ^{11}
Y=(−0.1010)×211
首先写出两浮点数的补码表示:(负数:真值按位取反。用双符号位表示可以观察阶符来判断是否溢出)
[
X
]
补
=
00
,
01
;
00.1101
\left[ X \right] 补 =00,01;00.1101
[X]补=00,01;00.1101
[
Y
]
补
=
00
,
11
;
11.0110
\left[ Y \right] 补 =00,11;11.0110
[Y]补=00,11;11.0110
求阶差:用小的阶码减大的阶码即可,求得-2,因此将X的尾数右移2位,其阶码加2。
[
X
]
补
=
00
,
11
;
00.0011
(
01
)
\left[ X \right] 补 =00,11;00.0011(01)
[X]补=00,11;00.0011(01)
很多读者可能会疑惑: 为什么X的尾数右移2位后,移出去的数字还要用括号记录下来。
原因: 如果将XY的尾数相加后没有满足规格化的条件,从而进行规格化,需要将XY相加得到的尾数进行左移(左规)时,这时候之前移出去的数字又利用了起来,从而减小了误差。如果没有记录之前移出去的数字,那么左移时低位会补0,显然如果记录了数字比如01,总比00造成的误差更小
对阶的时候右移,需要进行舍0入1判断。入1 是在***最低有效位***进行加1
对于无符号数,右移之后高位补0;对于有符号数,符号位一起移动,正数高位补0,负数高位补1
対阶的过程中右移2位,不是右移一次就判断一次。是右移结束后看最高位,如果一次一次的移就不存在看最高位了
2.尾数求和
3.规格化
4.舍入(舍0入1,仅仅针对右移,别问为什么)
在对阶和右规的过程中可能会将尾数的低位丢失
引起误差,影响精度。为此,引入舍入来提高尾数的精度。常用舍入方法有以下两种。
可能读者会疑惑:尾数溢出怎么判断?为什么这里进行的是右规?
尾数溢出就是尾数的双符号位不相同,嗯,右规的话,背住就好。
记住假溢出时候,符号位的最高位是正确的符号位。
5.溢出判断
记住,只看阶码的符号位
练习题
答案如下:(字迹不好将就看看)