为什么是numeric_limits <int> :: max()&gt; numeric_limits <int>的::无穷大()?</int>的</int>的

时间:2012-12-13 14:11:05

标签: c++ integer numeric limits integral

我正在阅读Setting an int to Infinity in C++。我明白当一个人需要真正的无穷大时,应该使用numeric_limits<float>::infinity();我猜其背后的基本原理是,通常整数类型没有指定用于表示特殊状态的值,如 NaN Inf 等,如IEEE 754浮点数(再次C ++没有'这两项任务都没有 - int&amp; float被用于实施);但对于给定类型,max > infinity仍有误导性。我试图理解标准中这个调用背后的基本原理。如果infinity对某个类型没有意义,那么不应该禁止它而不是要检查其标志的有效性吗?

4 个答案:

答案 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