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