解释FLT_MAX的位模式

时间:2013-05-03 03:06:08

标签: floating-point

FLT_MAX的位模式为01111111011111111111111111111111

如果我理解正确,这样的位模式应该代表1.111...1 * 2^128(十进制后的二十三个1)。但是,FLT_MAX的实际值仅为1.0 * 2^128。这是怎么回事?

1 个答案:

答案 0 :(得分: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

你可以看到第八位的差异。