1
FLT_MAX
的位模式爲01111111011111111111111111111111
。解釋FLT_MAX的位模式
如果我理解正確,這樣的位模式應該代表1.111...1 * 2^128
(小數點後有23個1)。但FLT_MAX
的實際值僅爲1.0 * 2^128
。這裏發生了什麼?
FLT_MAX
的位模式爲01111111011111111111111111111111
。解釋FLT_MAX的位模式
如果我理解正確,這樣的位模式應該代表1.111...1 * 2^128
(小數點後有23個1)。但FLT_MAX
的實際值僅爲1.0 * 2^128
。這裏發生了什麼?
你的指數錯了,它是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位看到了差距。