看板 C_and_CPP 關於我們 聯絡資訊
今天考了一個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