我正在阅读Setting an int to Infinity in C++。我明白当一个人需要真正的无穷大时,应该使用numeric_limits<float>::infinity()
;我猜其背后的基本原理是,通常整数类型没有指定用于表示特殊状态的值,如 NaN , Inf 等,如IEEE 754浮点数(再次C ++没有'这两项任务都没有 - int
&amp; float
被用于实施);但对于给定类型,max > infinity
仍有误导性。我试图理解标准中这个调用背后的基本原理。如果infinity
对某个类型没有意义,那么不应该禁止它而不是要检查其标志的有效性吗?
答案 0 :(得分:31)
numeric_limits<T>::infinity()
函数对于T
返回numeric_limits<T>::has_infinity
的{{1}}有意义。
如果是true
,则返回T=int
。因此,这种比较没有意义,因为false
不会返回任何有意义的值来与之比较。
答案 1 :(得分:6)
如果您阅读例如this reference您将看到一个表格,显示整数类型的无穷大为零。那是因为根据定义,C ++中的整数类型不能是无限的。
答案 2 :(得分:4)
相反,假设标准 保留了一些值来表示inifity和numeric_limits<int>::infinity() > numeric_limits<int>::max()
。这意味着int
的某些值大于max()
,也就是说,int
的某些可表示值大于int的最大可表示值。
显然,无论标准指定哪种方式,都会违反一些自然的理解。要么inifinity() <= max()
,要么存在x,int(x) > max()
。标准必须选择违反哪种自然规则。
我相信他们明智地选择了。
答案 3 :(得分:0)
numeric_limits<int>::infinity()
返回正无穷大的表示(如果可用)。
如果是整数,则不存在正无穷大:
cout << "int has infinity: " << numeric_limits<int>::has_infinity << endl;
打印
int has infinity: false