2. 假設要使用一簡化型8位元浮點表示法加總數字,指數部分以超4碼(excess four notation)表示 ,且不省略正規化後的小數位數第1位數,其欄位分配及範例如下所示。請問如依本題表示 法依序相加
,下列結果何者正確? 

(A) 
(B)
(C)
(D) 溢位錯誤
(A)

(B)
(C)

(D) 溢位錯誤
統計: A(514), B(158), C(381), D(160), E(0) #1476239
詳解 (共 8 筆)
先說明 3.5 的浮點數表示法為何是 0_110_1110, 後面比較好講解
3.510 = 11.12 = 0.111*22, 可表示為0_110_1110
注意兩點:
1. 題目提到"不省略正規化後的小數位數第1位數"
故以科學表示法表示時要化成0.xxxx開頭而非1.xxxx開頭
(這樣那個"不被省略的第1位數"才會存到浮點數表示法裡面)
與IEEE 754浮點數表示法用1.xxxx開頭有別
2. 此範例中, 化為科學表示法時的指數為2, 但因本題使用超四碼, 2+4=6=1102
故化成浮點數表示法時, 中間指數部分為110而非010
緊接著就可以做浮點數相加了, 步驟說明如下:
Step 1. 把被加數與加數化為科學表示法, 指數要化成一樣的數字(化為大的那個)
Step 2. 接著化成本題描述的浮點數表示法, 再把兩者假數部分相加得出結果, 最後把結果化為十進位
首先處理被加數2.5
2.510 = 10.12 = 0.101*22, 可表示為 0_110_1010
然後處理加數1/8
1/810 = 0.0012 = 0.1*2-2 = 0.00001*22, 可表示為 0_110_0000
(注意 被加數跟加數的指數要化成一樣的數字, 取大的那個, 2比-2大, 所以化成2)
(還有, 由於本題的浮點數表示法假數只有4bit, 00001的最後一個bit 1因放不下被砍掉了, 故假數是0000)
接著就可以相加了, 由於 0_110_1010 跟 0_110_0000 都是正的 (Sign Bit為0), 相加方式是假數直接相加, 得到0_110_1010
最後再加上第二個1/810 (0_110_0000), 得到0_110_1010, 化為十進位表示法為2.5, 選(A)
另外, 本題計算過程中, 1/8因數字太小而無法完整表示的現象, 稱為不足位(Underflow), 非(D)所稱之溢位(Overflow)錯誤