这个程序:
#include <iostream>
int main() {
float var_f = 9.999e38; //overflow the float
std::cout << var_f;
std::cin.get();
return 0;
}
打印出:inf
此处inf
是否代表无穷大(∞)?
为什么,当9.999e38
不是无限(可以通过双重类型存储)时?
为什么只有在float
时才会发生:
unsigned long int var_i = 4294967296; //overflow integer
如果我打印0
,请给我var_i
(我们总是知道)。
我使用了Visual Studio 2015。
答案 0 :(得分:1)
- 这里的inf是否代表无穷大(∞)?
醇>
是。请参阅std::numeric_limits::infinity。
- 为什么,当9.999e38不是无穷大(可以通过双重类型存储)?
醇>
float
的无穷大(不适用于double
)。它大于float
的最大可表示数量(即3.402823466e+38
或0X7F7FFFFF
)。
- 为什么只有浮动
才会发生 醇>
因为它对浮点数有意义,但不适用于整数。根据IEEE754(浮点表示),正无穷大是指数集的所有位的值,并且清除了分数的所有位(即0x7f800000
),其大于{的最大有限值{1}}(即float
)。
Floating point number representation
IEEE Floating-Point Representation
答案 1 :(得分:-1)
是的,inf
是一个特殊值,表示该值太大而无法存储在该对象中。在您的情况下,您尝试将double
值转换为float
。由于该值太大而无法存储在float
中,因此会存储inf
。
浮点类型(float
,double
,long double
)以这种方式工作,但整数类型没有inf
值。