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

(A) phpoZiOrF.png
(B) php0SVxGQ.png 
(C)phpYXtVYO.png
(D) 溢位錯誤

答案:登入後查看
統計: A(514), B(158), C(381), D(160), E(0) #1476239

詳解 (共 8 筆)

#1659381

先說明 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)錯誤


110
0
#2411899
剛開始的部分還是不懂為何0.111*22...
(共 37 字,隱藏中)
前往觀看
11
1
#2482615
超4碼  代表用 3 位元表示指數  2...
(共 191 字,隱藏中)
前往觀看
10
0
#3942336
實在不懂為什麼題目要這樣出 ==   這...
(共 86 字,隱藏中)
前往觀看
10
4
#4162759
 因為題目說:不省略正規化後的小數位數第...
(共 26 字,隱藏中)
前往觀看
10
2
#3132621
有點不了解『超4碼』的偏移量為何是4,雖...
(共 219 字,隱藏中)
前往觀看
10
0
#4139931
回樓上為何可以只保留小數點第一位,然後直...
(共 48 字,隱藏中)
前往觀看
2
1
#3503006
1,8,23老不用,愛用些別的
1
3