浮点数加减流程图
对阶
两个浮点数阶码换算成一致的,并用二位符号位表示,即正数为00,负数为11.
Γ
(
x
)
=
0.1101
∗
2
01
.
Γ
(
y
)
=
−
0.1010
∗
2
11
.
\Gamma(x)= 0.1101* 2^{01}. \Gamma(y)= -0.1010* 2^{11}.
Γ(x)=0.1101∗201.Γ(y)=−0.1010∗211.
阶码符号位 | 阶码数值位 | 尾数符号位 | 尾数数值位 |
---|---|---|---|
00 | 0001 | 00 | 1100 |
00 | 0011 | 11 | 1010 |
对阶后:(普通乘除法,小数点前移动,阶码数增加)
$$
阶码符号位 | 阶码数值位 | 尾数符号位 | 尾数数值位 |
---|---|---|---|
00 | 0011 | 00 | 0011 |
00 | 0011 | 11 | 1010 |
尾数求和
计算机里求和只能是补码求和,所以把两个数的尾数换算成补码,正数不用变,负数按位取反+1.
Γ
(
x
)
=
0.0011
∗
2
11
.
Γ
(
y
)
=
−
0.1010
∗
2
11
.
\Gamma(x)= 0.0011* 2^{11}. \Gamma(y)= -0.1010* 2^{11}.
Γ(x)=0.0011∗211.Γ(y)=−0.1010∗211.
阶码符号位 | 阶码数值位 | 尾数符号位 | 尾数数值位 |
---|---|---|---|
00 | 0011 | 00 | 0011 |
00 | 0011 | 11 | 1010 |
x[原]=00.0011 x[补]=00.0011
x[原]=11.1010 x[补]=11.0110(负数变补码,数值位按位取反并+1)
S=(x+y)[补]=11.1001
尾数规格化
对补码进行规格化需要判断两种情况即:S>0 && S<0
S[补]=00.1******(S>0)
S[补]=11.0******(S<0)
不满足格式需要进行左移,同时阶码相应变化,以满足规格化
阶码符号位 | 阶码数值位 | 尾数符号位 | 尾数数值位 |
---|---|---|---|
00 | 0011 | 11 | 1001 |
S=(x+y)[补]=11.1001
S=(x+y)[补]=11.(1)0010(左移)
阶码符号位 | 阶码数值位 | 尾数符号位 | 尾数数值位 |
---|---|---|---|
00 | 0010 | 11 | 0010 |
S=(x+y)[补]=11.0010
(x+y)[原]=-0.1110
左移右移
S[补]=01.11111111
右移一次:
01.00000000
右移第二次:
00.10000000(0)(0舍)
S[补]=00.10000000(1)(两次右移阶码+2)
舍入(只有右移才需要舍入)
0舍1入法
S[补]=10.10110111
S[补]=11.01011011(1)(右移操作,舍掉最后的1,但是舍掉的1无法存储,就在补码的右移的基础上+1,记得阶码+1)
溢出(之后输入之后才可能溢出)
通过阶码判断是否溢出
阶码10为上溢,01为下溢
阶码表示范围为[-(2m-1),2m-1]
尾数表示范围[-(1-2-n),-(2-n] … [2-n,1-2-n]