2013-05-03 73 views
1

FLT_MAX的位模式爲01111111011111111111111111111111解釋FLT_MAX的位模式

如果我理解正確,這樣的位模式應該代表1.111...1 * 2^128(小數點後有23個1)。但FLT_MAX的實際值僅爲1.0 * 2^128。這裏發生了什麼?

回答

3

你的指數錯了,它是1.111...1 * 2^127 = 2^128 - 2^104。這與2^128非常接近(相對),並且您需要在C或C++中以超過默認精度的方式將其打印出來以查看差異(請注意,作爲float - 如果這是IEEE754 32位float - 2^128是無窮大,所以你需要一個double)。

位模式產生

0 11111110 11111111111111111111111 
^ ^   ^
sign exponent  mantissa 
     254-127  2 - 2^(-23) 

打印完整的值:

340282346638528859811704183484516925440.0 // FLT_MAX 
340282366920938463463374607431768211456.0 // 2^128 

你可以在第8位看到了差距。