28

我正在阅读Setting an int to Infinity in C++。我知道当一个人需要真正的无限时,一个人应该使用numeric_limits<float>::infinity(); 我猜它背后的基本原理是,通常整数类型没有指定用于表示特殊状态的值,如NaNInf等,就像 IEEE 754 浮点数一样(同样,C++ 也没有强制要求 - int& floatused 留给实现);max > infinity但对于给定的类型,它仍然具有误导性。我试图理解标准中这个调用背后的基本原理。如果infinity对类型没有意义,那么不应该禁止它而不是检查其有效性的标志吗?

4

4 回答 4

34

该函数对那些 返回 numeric_limits<T>::infinity()的人有意义。Tnumeric_limits<T>::has_infinitytrue

如果是T=int,则返回false。所以这种比较没有意义,因为numeric_limits<int>::infinity()没有返回任何有意义的值来比较。

于 2012-12-13T14:16:57.420 回答
6

如果您阅读例如this reference,您将看到一个表格,其中显示整数类型的无穷大为零。这是因为根据定义,C++ 中的整数类型不能是无限的。

于 2012-12-13T14:17:23.053 回答
5

相反,假设该标准确实保留了一些值来表示无限性,那么numeric_limits<int>::infinity() > numeric_limits<int>::max(). 这意味着会有某个值int大于max(),即 的某个可表示值int大于 int 的最大可表示值。

显然,无论标准指定何种方式,都违反了一些自然的理解。要么inifinity() <= max(),要么存在 x 使得int(x) > max()。标准必须选择要违反的自然规则。

我相信他们的选择是明智的。

于 2012-12-13T14:41:50.870 回答
0

numeric_limits<int>::infinity()如果可用,则返回正无穷大的表示。

对于整数,不存在正无穷大:

cout << "int has infinity: " << numeric_limits<int>::has_infinity << endl;

印刷

int has infinity: false
于 2012-12-13T14:19:17.380 回答