2008年8月31日 星期日

IEEE-754 浮點數的表示法

為了防止忘記,又為重點考題,所以......

浮點數表示分為三個部份
S:符號,表示正負值,0為正,1為負
E:指數,基準值加上指數,單精度基準值為 [2^(8-1)]-1 = 127,倍精度基準值為 [2^(11-1)]-1 =1023
M:小數,又為精確值,小數值得正規劃,並且隱藏 MSB 的 1 (正規劃後面用例子解釋)

而又分為單精度與倍精度:單精度為32bits,倍精度為64bits
單精度 S:1bit E:8bits M:23bits
倍精度 S:1bit E:11bits M:52bits


ex. -12.625 使用 IEEE-754 單精度 表示浮點數

第一步驟:不管正負號直接將數值轉為二進制
 12.625 => 1100.101 = 1.100101 × 2^3

第二步驟:計算指數
 127+3=130 => 10000010

第三步驟:填入數值置於浮點數規格中
 S E      M
 1 10000010 100101 0000 0000 0000 0000 0
 
 *注意:1)小數部份要隱藏 MSB 的 1 ,只填入小數點之後的數值
     2)剩餘沒用到的地方補0,補足至 23bits (倍精度就補足到 52bits)

 如此一來可以將轉出來的浮點數再表示成 16 進制
 => 1100 0001 0100 1010 0000 0000 0000 0000
 => C14A0000

補充:
 1. 指數E保留0與255做為特殊用途,因此指數真正的範圍在1~254之間。
 2. 指數E與小數M的特殊用途組合如下
   E=0  M=0:表示0
   E=0  M≠0:未正規形式
   E=255 M=0:表示無限大 (配合正負號,可以表示正無限、負無限)
   E=255 M≠0:NaN (Not a Number)
 3. 浮點數精確度的問題
   由於浮點數當小數位數不足的時候會發生兩種 error
   a.進位誤差:超出表示範圍的數值,使用四捨五入產生的誤差
   b.捨去誤差:不足放入小數表示位數所剩餘的小數值,皆捨去產生的誤差
   所以為了解決這樣的誤差,只有提高小數點可存放的位數,但是相對的所佔用的容量就很大
 4. 轉換浮點數值的網頁工具
   http://babbage.cs.qc.edu/IEEE-754/Decimal.html

15 則留言:

匿名 提到...

您的數值 12.625 是正數, 所以 S 應該是 0

絕色幻翼 提到...

此例是用 -12.625 來說明的,因此結果沒錯。也謝謝您的指教。

匿名 提到...

感謝您
剛好不太會
上課又很混

匿名 提到...

哈哈我明天要考計概,謝謝妳唷 我平常都超混現在給妳一點都會了XD

絕色幻翼 提到...

呵呵呵~不客氣,對你有幫助就好,不過這只是IEEE-754的標準轉換方法,如果考題出來是由題目所另外規定,就要按照題目上規定的來答題。

匿名 提到...

感謝你囖
今天考記數有救了
\(^o^)/

匿名 提到...

第一步驟:不管正負號直接將數值轉為二進制
 12.625 => 1100.101 = 1.100101 × 2^3

後面的2^3不是應該是10^3嗎0.0

ps.感謝你淺顯易懂的解說QAQ

絕色幻翼 提到...

因為已經轉為二進制,所以才是2^3
基底為 10進制 10^3 = 1000
基底為 2進制 2^3 = 1000 => 轉為10進制就是8

匿名 提到...

推淺顯易懂~我12月要考~吃鱉中 ^^
不知有沒有國營職員-儀電組的計概中試題說明之類的嗎??
IEEE.754剛好有一年有考出來
因為都是計算題~
網路上都找不到answer
如果版大有空可以分享一下嗎
不好意思囉
覺得這篇說明受益良多
謝謝您:)

絕色幻翼 提到...

關於這點就愛莫能助了
很抱歉

Xanxus 提到...

大大您寫得很好

讓我一看就懂

匿名 提到...

Thanks!
It's really helpful to me.
:D

匿名 提到...

還有~補零時為不影響數值的補零,所以E的補玲要補前面,M的補零要補後面

絕色幻翼 提到...

指數(E)不需要補零,因為在設計上所有位元都會用上,指數的十進制0~255正好填滿二進制的00000000~11111111,所以沒有要補零的問題。
小數(M)就確實要補零在後面

匿名 提到...

謝謝您細心的解說��一看就懂了��