有正體漢字字幕請開https://anwendeng.blogspot.com/2017/10/video-101int-float.html筆算#IEEE754Float 浮點數 C程式顯示IEEE 754 Float 浮點數 ... ... <看更多>
「單精度浮點 數 範例」的推薦目錄:
- 關於單精度浮點 數 範例 在 [問題] IEEE 754 浮點數運算觀念問題- 看板Electronics 的評價
- 關於單精度浮點 數 範例 在 秒懂如何筆算IEEE 754 Float浮點數 - YouTube 的評價
- 關於單精度浮點 數 範例 在 [Verilog入門教學] 本篇#20 單精度浮點數加法器 ... - YouTube 的評價
- 關於單精度浮點 數 範例 在 許志華計概6-1 浮點數表示法 - YouTube 的評價
- 關於單精度浮點 數 範例 在 深入了解浮點數IEEE 754 | Coding Hub 的評價
- 關於單精度浮點 數 範例 在 Python Taiwan | 大家好 - Facebook 的評價
單精度浮點 數 範例 在 [Verilog入門教學] 本篇#20 單精度浮點數加法器 ... - YouTube 的推薦與評價
[Verilog入門教學] 本篇#20 單精度浮點數 加法器Single-precision Floating-point Adder. Merak Channel 天璇. ... <看更多>
單精度浮點 數 範例 在 許志華計概6-1 浮點數表示法 - YouTube 的推薦與評價
許志華計概6-1 浮點 數 表示法. Chih-hua Hsu. Chih-hua Hsu ... [Verilog入門教學] 本篇#20 單精度浮點數 加法器Single-precision Floating-point Adder. ... <看更多>
單精度浮點 數 範例 在 深入了解浮點數IEEE 754 | Coding Hub 的推薦與評價
這邊先破題一下,原因是因為我們在電腦裡面 只有有限位元(32 bits 或64 bits)去表示數字,在浮點數的儲存與計算時會捨去一些精度,造成計算的誤差 ... ... <看更多>
單精度浮點 數 範例 在 Python Taiwan | 大家好 - Facebook 的推薦與評價
(以IEEE 754 單精度浮點數為例,1個sign bit,8個exponent bit,23個mantissabit) ... 你曾試圖跟著書上的範例一行一行敲下程式碼,期待著能看到成功的執行結果。 ... <看更多>
單精度浮點 數 範例 在 [問題] IEEE 754 浮點數運算觀念問題- 看板Electronics 的推薦與評價
(代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,以硬體的角度而言應該是不會這樣設計?
第二個問題:
在網路上查到的引入round,guard後的rounding方法大概是這樣
若
(一): (G,R) = (0,0)>捨去
(二): (G,R) = (0,1)>捨去
(三): (G,R) = (1,0)>看sticky bit是多少決定要不要捨or進
(四): (G,R) = (1,1)>進位
我對於(一),(二),(四)這三種方式都能接受
但是(三),若(G,R) = (1,0)的話
換成十進位不就是0.5,以四捨五入的角度來說不是就是直接進位嗎?
為什麼還要看sticky是多少來決定要不要進位呢?
目前主要就這兩個問題,希望各位可以替我解答一下,感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.49.195 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1590756972.A.FD5.html
謝謝您的回答
但是超出的BIT似乎沒辦法只用1BIT表示吧?
如果要表示的話,應該至少也要用GUARD和ROUND兩個BIT來表示吧?
抱歉,小弟資質較差 想了蠻久的還是沒辦法了解您在說什麼
我是看到白算盤課本上的範例在移位的時候若有超過範圍的話
似乎是保留一個GUARD一個ROUND來運算
跟您說的似乎不太一樣才會這樣問@@..
※ 編輯: ayn775437403 (118.160.49.195 臺灣), 05/29/2020 23:32:50
所以依照您的意思來說
我問題一的答案應該是(三)吧?
就是需要加入g r s來判斷對吧
※ 編輯: ayn775437403 (114.43.134.169 臺灣), 05/30/2020 16:14:03
... <看更多>