作者lovefo (lovefo)
看板C_and_CPP
標題[問題] IEEE 754 轉換表示
時間Wed Apr 18 00:14:44 2012
今天考了一個IEEE 轉換的問題
想了一整天 還是沒有解答...
是這樣 將 浮點數 0.406982 轉成適合 16 bit 的IEEE 754格式(s=1,e=5.f=10)
我將 0.406982*2 = 0.813964
0.813964*2 = 1.627928
0.627928*2 = 1.255856
0.255856*2 = 0.511712
0.511712*2 = 1.023424
0.023424*2 = 0.046848
0.046848*2 = 0.093696
0.093696*2 = 0.187392
0.187392*2 = 0.374784
0.374784*2 = 0.749568
0.749568*2 = 1.499136
0.499136*2 = 0.998272
0.998272*2 = 1.996544
.
.
0.406982 = 0.0110100000101 = 1.10100000101*2^-2
所以可以得知 e = 13 , f = 1010000010 = 642
2 10
但 助教給答案卻是 e = 13 , f = 643
我不知道哪裡想錯了
我在想 是不是 因為 助教用程式跑的 所以有精準度的問題??
謝謝各位解答了 謝謝
--
一切....
似乎不再那麼重要....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.228.47
※ 編輯: lovefo 來自: 123.240.228.47 (04/18 00:15)
→ diabloevagto:我猜會被砍文... 04/18 00:15
→ EdisonX:猜的~往下算時,最後的bit是1,進位成 0.0110100000110 04/18 00:37
推 VictorTom:問題在於, 你的計算不夠精確, 你只計算了13位, 等於後面 04/19 01:07
→ VictorTom:都被你捨棄了, 所以再最後做進捨位時就出現了誤差@_@" 04/19 01:08
→ VictorTom:印象中需要算到滿足位數加兩位, 並記錄兩位以後是否還有 04/19 01:10
→ VictorTom:值, 然後00, 01捨, 11入, 10(有剩值)也入, 10(後全0)為 04/19 01:11
→ VictorTom:特別的偶成雙規則(至少小弟記得32bit float是這樣啦XD) 04/19 01:12
推 VictorTom:仔細想, 多算一位, 但進捨位時把餘數一起考慮就好了Orz 04/19 01:17