2017-09-09 267 views
4

我被困在家庭作業上;我需要將二進制浮點數轉換爲小數點。我覺得我理解這個過程,但我沒有得到正確的答案。這是我的思考過程。如何將二進制浮點數轉換爲小數?

我有二進制浮動:0 000 101

  • 對於3位指數字段偏置爲3:2^(3-1)-1 = 3
  • 尾數變得1.101(基數爲2)
  • 指數位的值,0,減去指數位數3,爲-3,所以尾數的小數點左移3位
    0.001101
  • 以10爲底,即2^-3 + 2^-4 + 2^-6,等於0.203125或13/64。

但是,13/64不是正確的答案,自動平地機不接受它。如果我的回答是錯誤的,那麼我不明白爲什麼,而且我希望有人能夠指引我正確的方向。

純運氣我猜想5/32作爲答案,並得到了正確的;我不知道爲什麼這樣。

+0

它說什麼了正確的答案是什麼? –

+0

另一種方式來看看這個0.001101正確或錯誤是一樣的1101/2^6或13/64。所以你的指數必須是錯的?知道正確的答案應該解決這個問題是嗎? –

+1

純運氣我猜想5/32作爲答案,並得到了正確的;我不知道爲什麼是這樣的情況 – Grav

回答

4

在IEEE-754浮點格式中,exponent = 0是反常規,其中隱含的尾數在尾數爲0

維基百科在single-precision float (binary32)格式上有很好的詳細文章,並有很多例子。對於binary32浮動,按下列公式(從維基文章):

(−1)^signbit × 2^(−126)  × 0.significandbits ; denormal, expbits=0 
(−1)^signbit × 2^(expbits−127) × 1.significandbits ; normal 
Inf or NaN (depending on mantissa aka significant); expbits = all 1s 

(注意,0.0表示非正規的特殊情況,但實際上並沒有考慮反規範)。

無論如何,零指數,注意指數不再是expbits - bias,它是更高的。


回到你的情況:你的尾數爲0.101二進制,十進制0.625(我插0b101/8calc)。

2^-2 * 0.101(二進制)= 2^-2 * 0.625(十進制)= 0.15625 = 5/32


有一個https://en.wikipedia.org/wiki/Minifloat維基百科文章,其中提到(與實施例)8位IEEE格式以及其他一些在計算機圖形硬件上實際使用的小於32位的格式。 (例如24位或16位)。有趣的事實:x86可以加載/存儲16位半精度浮點數的向量,可以通過F16C ISA extension隨時在寄存器中單向轉換。

另請參閱的複選框這個在線轉換器位:https://www.h-schmidt.net/FloatConverter/IEEE754.html

相關問題