2014-03-03 75 views
-1

所以我想返回f的指數值。如果x是無窮大或NaN,我需要返回Tmax。 f被解釋爲單精度浮點值的位級表示,是的,我的意思是傳入一個無符號變量。我知道我需要爲偏見消除適當的價值。我只是不知道如何。我可以使用任何我想要的操作,但只有8個(=不計數)。獲取C中浮點數的指數

int float_exp(unsigned uf) { 
    int mask = 2139095040; 
    int hold; 
    hold = uf & mask; 
    if(mask == hold){ 
      return Tmax; 
    } else { 
     return ;// something here??? 
    } 

} 

我不知道如何得到指數。任何幫助,將不勝感激!

+3

如果不是作業,您可以在手冊中查找'frexp()'。 –

+0

另請參見[在二進制中將浮點數除以一半](http://stackoverflow.com/questions/22159484/dividing-floating-point-numbers-by-half-in-binary)。不是直接重複,而是密切相關。 –

+0

@JonathanLeffler你的評論沒有幫助。 – Shaw

回答

1

如果數字是非規格化的,則從指數中減去127。如果不是,那麼減去126.

+0

謝謝。我想我現在明白了。 – Shaw

+0

@Cole反過來,如果這個數字是非規範化的,減去126。 – chux

2

檢查浮點格式http://en.wikipedia.org/wiki/IEEE_754-1985

二進制指數是位23到30所以屏蔽對0x7F800000,因爲你做了之後,你只需要通過23位和你移位什麼左至右有你的二進制指數。

然後通過減去偏差來調整偏差。