計算機組成原理浮點數加減

狗蛋兒l發表於2020-12-06

浮點數加減流程圖

Created with Raphaël 2.2.0 對階 尾數求和 尾數規格化 雙符號位不一致 右移 舍入 滿足規格化 溢位判斷並輸出 是否需要左移 左移 yes no yes no yes no

對階

在這裡插入圖片描述兩個浮點數階碼換算成一致的,並用二位符號位表示,即正數為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.1101201.Γ(y)=0.1010211.

階碼符號位階碼數值位尾數符號位尾數數值位
000001001100
000011111010

對階後:(普通乘除法,小數點前移動,階碼數增加)
$$

階碼符號位階碼數值位尾數符號位尾數數值位
000011000011
000011111010

尾數求和

計算機裡求和只能是補碼求和,所以把兩個數的尾數換算成補碼,正數不用變,負數按位取反+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.0011211.Γ(y)=0.1010211.

階碼符號位階碼數值位尾數符號位尾數數值位
000011000011
000011111010

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)

不滿足格式需要進行左移,同時階碼相應變化,以滿足規格化

階碼符號位階碼數值位尾數符號位尾數數值位
000011111001

S=(x+y)[補]=11.1001
S=(x+y)[補]=11.(1)0010(左移)

階碼符號位階碼數值位尾數符號位尾數數值位
000010110010

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為下溢

相關文章