為了防止忘記,又為重點考題,所以......
浮點數表示分為三個部份
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. 維基百科的詳細說明 IEEE 754
30 則留言:
您的數值 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
如果版大有空可以分享一下嗎
不好意思囉
覺得這篇說明受益良多
謝謝您:)
關於這點就愛莫能助了
很抱歉
大大您寫得很好
讓我一看就懂
Thanks!
It's really helpful to me.
:D
還有~補零時為不影響數值的補零,所以E的補玲要補前面,M的補零要補後面
指數(E)不需要補零,因為在設計上所有位元都會用上,指數的十進制0~255正好填滿二進制的00000000~11111111,所以沒有要補零的問題。
小數(M)就確實要補零在後面
謝謝您細心的解說��一看就懂了��
大大你好
我在維基百科上看到
在解釋 指數偏移值的地方
"以單精度浮點數為例,它的指數域是8個位元,固定偏移值是 127。此為有號數的表示方式,單精度浮點數的指數部分實際取值是從-128到127。"
-128~127的範圍是指甚麼??
維基百科裡提到的-128~127指的應該是補數範圍
ieee的指數部分若不考慮特殊保留00000000(0 or denormalized number),11111111(infinity or NaN)
以01111111為0
00000000 = -127
11111111 = 128
範圍為-127~128若考慮保留則是-126~127
參考資料:計算機組織課本、http://steve.hollasch.net/cgindex/coding/ieeefloat.html
有用顏色標示,很清楚
發現跟記概課本算法有出入
12.625 => 1100.101 = 0.1100101 × 2^4 <==記概課本
現在才發現計概課本用的不是IEEE-754
實在是太感謝了...知道原理之後自幹PHP成功了
謝謝 很詳細
那0.00875怎麼轉成32位元啊?
這看起來好像是作業,過程就不寫了,直接給你答案
32位元有兩種可能
捨去誤差 3C0F5C28
進位誤差 3C0F5C29
64位元就沒這問題
3F81ED851ED851EC
中間比較有問題的可能是進位轉換,網路上再找找看相關內容
PS.因為小數位數很多若有計算錯誤請見諒
我雖然高中讀電機科 但是完全看不懂 好慘...在這邊可以找到基礎的知識嗎?
這裡基礎知識其實沒有很多,可以說大概只有這篇,這篇內的問題大概還可以幫你回答。
2018年3月6日的留言有錯誤喔
偏移值照你這樣數真的不會是-128到127,是-127到128
把他模型化縮小就能理解了,不信的自己數一次也會知道
十進位 偏移值
0 -3 (左行-右行永遠等於基準值3
1 -2 (因為同加同減差距不會變
2 -1
3 0 設定3為基準值
4 (4-3=) 1
5 (5-3=) 2
6 (6-3=) 3
當基準值為127時
不難看出是變成
0 -127 (左-右=127)
1 -126
2 -125
... ...
127 0
128 1
129 2
... ...
255 128 (255-128=127,代表左右差距不變
感謝網友的糾錯,2018年3月6日指數範圍確實是寫錯
以下補正
IEEE 754 指數範圍是 -127~128
過去有錯誤的回應自會刪除文章重新補正
回應2018年3月5日
單精度指數有 8 bits 因此指數範圍就是-127~128。
因為浮點數表示法就是使用有號數表示,會有個 1 bit 來表示正負號。
而指數有 8 bits 可以表示範圍就是 00000000~11111111 => 0~255,因為指數規定要用基準值(中間值)來記錄,因此 8 bits 的一半就是 01111111 => 127 作為中間值,用這個數值表示指數0,因此排列出來的範圍就如下
二進位 十進位 偏移值
0000 0000 => 0 => -127
...
0111 1100 => 124 => -3
0111 1101 => 125 => -2
0111 1110 => 126 => -1
0111 1111 => 127 => 0 <== 基準值 (中間值)
1000 0000 => 128 => 1
1000 0001 => 129 => 2
1000 0010 => 130 => 3 <== 本文中的例子就是
...
1111 1111 => 255 => 128
因此計算的時候就不要自找麻煩了,單精度的就直接用拿127來計算,處理完偏移再轉為二進制填入適當位置就好。另外wiki裡面說的偏移值就是指文中例子步驟一所計算出來的3,因此有了基準值+偏移值,才會是真正的浮點表示法中呈現出數值。
希望能幫助到你
張貼留言