我在读Setting an int to Infinity in C++。我理解,当一个人需要真正的无穷大时,人们应该使用numeric_limits<float>::infinity()
;我猜其背后的理由是,通常积分类型没有指定值来表示特殊的状态,如NaN、Inf等,比如IEEE 754浮点数(同样,C++也不强制--使用的int
和float
都留给实现);但是对于给定的类型,max > infinity
仍然是误导的。我试图在标准中理解这个调用背后的原理。如果拥有infinity
对类型没有意义,那么它不应该被禁止,而不是让一个标志被检查它的有效性吗?
发布于 2012-12-13 14:16:57
函数numeric_limits<T>::infinity()
对于那些numeric_limits<T>::has_infinity
返回true
的T
来说是有意义的。
如果是T=int
,则返回false
。所以这种比较没有意义,因为numeric_limits<int>::infinity()
没有返回任何有意义的值来与之比较。
发布于 2012-12-13 14:17:23
如果您阅读例如this reference,您将看到一个显示整数类型的无穷大为零的表。这是因为根据定义,C++中的整数类型不能是无限的。
发布于 2012-12-13 14:41:50
相反,假设标准保留了一些值来表示不稳定性,而numeric_limits<int>::infinity() > numeric_limits<int>::max()
则是这样。这意味着int
的某些值大于max()
,也就是说,int
的一些可表示值大于int的最大可表示值。
显然,无论标准规定哪种方式,都违反了一些自然的理解。要么是inifinity() <= max()
,要么是存在x这样的int(x) > max()
。标准必须选择违反哪条自然法则。
我相信他们做出了明智的选择。
https://stackoverflow.com/questions/13861629
复制相似问题