为什么`inf`代表浮动溢出?

时间:2016-03-13 04:18:44

标签: c++ visual-studio

这个程序:

#include <iostream>

int main() {
    float var_f = 9.999e38; //overflow the float
    std::cout << var_f;

    std::cin.get();
    return  0;  
}

打印出:inf

  1. 此处inf是否代表无穷大(∞)?

  2. 为什么,当9.999e38不是无限(可以通过双重类型存储)时?

  3. 为什么只有在float时才会发生:

    unsigned long int var_i = 4294967296; //overflow integer

    如果我打印0,请给我var_i(我们总是知道)。

  4. 我使用了Visual Studio 2015。

2 个答案:

答案 0 :(得分:1)

  
      
  1. 这里的inf是否代表无穷大(∞)?
  2.   

是。请参阅std::numeric_limits::infinity

  
      
  1. 为什么,当9.999e38不是无穷大(可以通过双重类型存储)?
  2.   

float的无穷大(不适用于double)。它大于float的最大可表示数量(即3.402823466e+380X7F7FFFFF)。

  
      
  1. 为什么只有浮动
  2. 才会发生   

因为它对浮点数有意义,但不适用于整数。根据IEEE754(浮点表示),正无穷大是指数集的所有位的值,并且清除了分数的所有位(即0x7f800000),其大于{的最大有限值{1}}(即float)。

Floating point number representation
IEEE Floating-Point Representation

答案 1 :(得分:-1)

是的,inf是一个特殊值,表示该值太大而无法存储在该对象中。在您的情况下,您尝试将double值转换为float。由于该值太大而无法存储在float中,因此会存储inf

浮点类型(floatdoublelong double)以这种方式工作,但整数类型没有inf值。