浮點數加減運算中左規右規問題
當尾數用二進位制表示時,浮點規格化的定義是尾數M應滿足:
1/2 ≤ |M|<1
顯然對於正數而言,有M = 00.1φφ…φ;對於負數,其補碼形式為11.0φφ…φ(即-0.0*******,左歸)。這樣,當進行補碼浮點加減運算時,只要對運算結果的符號位和小數點後的第一位進行比較:如果它們不等,即為00.1φφ…φ或11.0φφ…φ,就是規格化的數;如果它們相等,即為00.0φφ…φ或11.1φφ…φ,就不是規格化的數,在這種情況下需要尾數左移以實現規格化的過程,叫做向左規格化。規則是:尾數左移1位,階碼減1。
在浮點加減運算時,尾數求和的結果也可以得到01.φφ
【例 】 設x=2010×0.11011011,y=2100×(-0.10101100),求x+y。
[解:]
為了便於直觀理解,假設兩數均以補碼錶示,階碼採用雙符號位,尾數採用單符號位,則它們的
浮點表示分別為
[x]浮=00 010, 0.11011011
[y]浮=00 100, 1.01010100
<1> 求階差並對階
△E=Ex-Ey=[Ex]補+[-Ey]補=00 010+11 100=11 110
即△E為-2,x的階碼小,應使Mx右移兩位,Ex加2,
[x]浮=00 100,0.00110110(11)
其中(11)表示Mx右移2位後移出的最低兩位數。
<2> 尾數求和
0. 0 0 1 1 0 1 1 0 (11)
+ 1. 0 1 0 1 0 1 0 0
1. 1 0 0 0 1 0 1 0 (11)
<3>規格化處理
尾數運算結果的符號位與最高數值位同值,應執行左規處理,結果為1.00010101(10),階碼為 00 011。
<4>舍入處理
採用0舍1入法處理,則有
1. 0 0 0 1 0 1 0 1 + 1 ──────────────── 1. 0 0 0 1 0 1 1 0
<5>判溢位
階碼符號位為00,不溢位,故得最終結果為
x+y=2011×(-0.11101010)