1. 程式人生 > >浮點加減運算中左規右規問題

浮點加減運算中左規右規問題

pan align In 位與 strong text 1.0 數值 ati

當尾數用二進制表示時,浮點規格化的定義是尾數M應滿足:

1/2 ≤ |M|<1

顯然對於正數而言,有M = 00.1φφφ;對於負數,其補碼形式為11.0φφφ(即-0.0*******,左歸)。這樣,當進行補碼浮點加減運算時,只要對運算結果的符號位和小數點後的第一位進行比較:如果它們不等,即為00.1φφφ或11.1φφφ,就是規格化的數;如果它們相等,即為00.0φφφ或11.0φφφ,就不是規格化的數,在這種情況下需要尾數左移以實現規格化的過程,叫做向左規格化。規則是:尾數左移1位,階碼減1

在浮點加減運算時,尾數求和的結果也可以得到01.φφ

φ或10.φφφ,即兩符號位不相等,在這定點加減運算中稱為溢出,是不允許的。但在浮點運算中,它表明尾數求和結果的絕對值大於1,向左破壞了規格化。此時將尾數運算結果右移以實現規格化表示,稱為向右規格化,即尾數右移1位,階碼加1

【例 】 =2010×0.11011011,=2100×(-0.10101100),求

[解:]

為了便於直觀理解,假設兩數均以補碼表示,階碼采用雙符號位,尾數采用單符號位,則它們的

浮點表示分別為

[]=00 010,  0.11011011

[]=00 100,  1.01010100

<1> 求階差並對階

EEE=[E]+[-E]=00 010+11 100=11 110

即△E

為-2,的階碼小,應使M右移兩位,E加2,

[]=00 100,0.00110110(11)

其中(11)表示M右移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=2011×(-0.11101010)

浮點加減運算中左規右規問題