首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么numeric_limits<int>::max() > numeric_limits<int>::infinity()?

为什么numeric_limits<int>::max() > numeric_limits<int>::infinity()?
EN

Stack Overflow用户
提问于 2012-12-13 14:11:04
回答 4查看 6.2K关注 0票数 28

我在读Setting an int to Infinity in C++。我理解,当一个人需要真正的无穷大时,人们应该使用numeric_limits<float>::infinity();我猜其背后的理由是,通常积分类型没有指定值来表示特殊的状态,如NaN、Inf等,比如IEEE 754浮点数(同样,C++也不强制--使用的intfloat都留给实现);但是对于给定的类型,max > infinity仍然是误导的。我试图在标准中理解这个调用背后的原理。如果拥有infinity对类型没有意义,那么它不应该被禁止,而不是让一个标志被检查它的有效性吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-13 14:16:57

函数numeric_limits<T>::infinity()对于那些numeric_limits<T>::has_infinity返回trueT来说是有意义的。

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

票数 34
EN

Stack Overflow用户

发布于 2012-12-13 14:17:23

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

票数 6
EN

Stack Overflow用户

发布于 2012-12-13 14:41:50

相反,假设标准保留了一些值来表示不稳定性,而numeric_limits<int>::infinity() > numeric_limits<int>::max()则是这样。这意味着int的某些值大于max(),也就是说,int的一些可表示值大于int的最大可表示值。

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

我相信他们做出了明智的选择。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13861629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档