IEEE 754 浮點數運算觀念問題 - 考試
By Daniel
at 2020-05-30T15:30
at 2020-05-30T15:30
Table of Contents
(代PO)
大家好,小弟最近在學浮點數
有幾個運算觀念卡關,因此來這邊求助大家。
這邊問題都以IEEE 754 單精度浮點數為例
(即1個sign bit,8個 exponent bit,23個mantissabit)
第一個問題:
兩個浮點數在算加減法的時候,exponent小的mantissa要對齊exponent大的mantissa
也就是要看兩個浮點數的exponent差距多少來看mantissa要移位多少
那如果exponent小的那個的mantissa在移位過後超過mantissa所能表示的範圍
要把超過範圍的那幾個bit一起算,還是要捨去呢?
舉例來說
我要算兩個浮點數相減
第一個數:
0 10010011 0000 0000 0000 0000 1111 111
| |------| |--------------------------|
sign exponent mantissa
第二個數:
1 10001110 0000 0000 0000 0111 1111 111
| |------| |--------------------------|
sign exponent mantissa
第一個數的exponent換成十進位是147,第二個數的exponent換成十進位是142
而147-127(bias)=20,142-127=15
所以事實上上面兩個數可以變為:
第一個數:
1.0000 0000 0000 0000 1111 111 * 2^20
第二個數:
-1.0000 0000 0000 0111 1111 111 * 2^15
因為第二個數比第一個數的次方少五,所以要右移5個bit
那麼問題來了,移完之後是會變成
(一)所有bit都保留,因此共要28bit表示mantissa
-0.0000 1000 0000 0000 0011 1111 1111 *(2^20)
|----|
這五個bit超過23bit
(二)超過23bit之後直接砍掉,因此滿足23bit表示mantissa
-0.0000 1000 0000 0000 0011 111 *(2^20)
(三)加入round,guard,sticky三個bit去考慮,因此用25bit表示mantissa
-0.0000 1000 0000 0000 0011 1111 1 且設S=1(因為砍掉後面三個1)
| |
G R
是上面(一)、(二)、(三)的哪一種呢?
因為這三種不同的移位方式會造成最後答案都不一樣,
所以我想IEEE 754應該會有明確的規範。
我個人是比較傾向於第(三)種,
因為如果是第(一)種的話,兩個浮點數若exponent差太多
那就要保存一大堆數字,像是兩數的exponent如果差了一百
那小的exponent很可能就要保存一百個0外加原本的23個mantissa
等於要保存123個bit,以硬體的角度而言應該是不會這樣設計?
--
大家好,小弟最近在學浮點數
有幾個運算觀念卡關,因此來這邊求助大家。
這邊問題都以IEEE 754 單精度浮點數為例
(即1個sign bit,8個 exponent bit,23個mantissabit)
第一個問題:
兩個浮點數在算加減法的時候,exponent小的mantissa要對齊exponent大的mantissa
也就是要看兩個浮點數的exponent差距多少來看mantissa要移位多少
那如果exponent小的那個的mantissa在移位過後超過mantissa所能表示的範圍
要把超過範圍的那幾個bit一起算,還是要捨去呢?
舉例來說
我要算兩個浮點數相減
第一個數:
0 10010011 0000 0000 0000 0000 1111 111
| |------| |--------------------------|
sign exponent mantissa
第二個數:
1 10001110 0000 0000 0000 0111 1111 111
| |------| |--------------------------|
sign exponent mantissa
第一個數的exponent換成十進位是147,第二個數的exponent換成十進位是142
而147-127(bias)=20,142-127=15
所以事實上上面兩個數可以變為:
第一個數:
1.0000 0000 0000 0000 1111 111 * 2^20
第二個數:
-1.0000 0000 0000 0111 1111 111 * 2^15
因為第二個數比第一個數的次方少五,所以要右移5個bit
那麼問題來了,移完之後是會變成
(一)所有bit都保留,因此共要28bit表示mantissa
-0.0000 1000 0000 0000 0011 1111 1111 *(2^20)
|----|
這五個bit超過23bit
(二)超過23bit之後直接砍掉,因此滿足23bit表示mantissa
-0.0000 1000 0000 0000 0011 111 *(2^20)
(三)加入round,guard,sticky三個bit去考慮,因此用25bit表示mantissa
-0.0000 1000 0000 0000 0011 1111 1 且設S=1(因為砍掉後面三個1)
| |
G R
是上面(一)、(二)、(三)的哪一種呢?
因為這三種不同的移位方式會造成最後答案都不一樣,
所以我想IEEE 754應該會有明確的規範。
我個人是比較傾向於第(三)種,
因為如果是第(一)種的話,兩個浮點數若exponent差太多
那就要保存一大堆數字,像是兩數的exponent如果差了一百
那小的exponent很可能就要保存一百個0外加原本的23個mantissa
等於要保存123個bit,以硬體的角度而言應該是不會這樣設計?
--
Tags:
考試
All Comments
By Joseph
at 2020-06-02T14:38
at 2020-06-02T14:38
Related Posts
109關務身特回報
By Caroline
at 2020-05-30T09:58
at 2020-05-30T09:58
關於行政法,講一個許宗力的八卦~~
By Damian
at 2020-05-30T09:15
at 2020-05-30T09:15
[補習] 初等考法學大意 李岳or陳治宇?
By Brianna
at 2020-05-29T21:58
at 2020-05-29T21:58
大法官釋字791號解釋-通姦罪除罪
By Gilbert
at 2020-05-29T16:08
at 2020-05-29T16:08
考前多久開始閉關?
By Blanche
at 2020-05-29T14:18
at 2020-05-29T14:18