c+中积分类型的正无穷大和负无穷大+; 我正在阅读C++中的正负无穷大。
我读到整数类型没有无穷大的值,即c+中积分类型的正无穷大和负无穷大+; 我正在阅读C++中的正负无穷大。,c++,types,infinity,numeric-limits,C++,Types,Infinity,Numeric Limits,我读到整数类型没有无穷大的值,即std::numeric_limits::infinity()不起作用,但std::numeric_limits::max()将起作用,并将表示整数类型可以表示的最大可能值 因此,std::numeric_limits::max()可作为其正无穷极限 或者整数类型只有最大值,而无穷大值不是真的?整数总是有限的 你能找到的最接近你要找的东西是将一个整数设置为它的最大值,这对于一个有符号整数来说只有20亿左右 std::numeric_limits有一个has_inf
std::numeric_limits::infinity()代码>不起作用,但std::numeric_limits::max()代码>将起作用,并将表示整数类型可以表示的最大可能值
因此,std::numeric_limits::max()积分类型的code>可作为其正无穷极限
或者整数类型只有最大值
,而无穷大值
不是真的?整数总是有限的
你能找到的最接近你要找的东西是将一个整数设置为它的最大值,这对于一个有符号整数来说只有20亿左右
std::numeric_limits有一个has_infinity成员,您可以使用它来检查您想要的类型是否具有无限表示形式,通常仅在浮点数(如float和double)上使用。浮点数有一个特殊的位模式来指示“值为无穷大”,当某个操作的结果被定义为无限时使用
整数值有一组位数,所有位数都用来表示一个数值。没有“特殊位模式”,它只是位位置总和的意思
编辑:在我的AMD64体系结构程序员手册的硬拷贝第315页上,它说
无限。无穷大是一个正数或负数+∞ 和
-∞, 其中整数位为1,偏置指数最大,分数为0。infintes是
可以用浮点格式表示,负无穷小
大于任何有限数且正无穷大大于任何
有限数(即仿射意义)
当一个非零的、非无穷的数为
除以0或乘以无穷大,或将无穷大加到
无穷大或0。算术无穷是精确的。例如,添加
任何浮点数都可以+∞ 给出结果+∞
算术比较在无穷大上正确工作。出现例外情况
仅当使用无穷大作为源操作数构成
无效操作
(任何键入错误都是我的)据我所知,所有数据类型都是有限的。最大值是一个有限值,例如32位。你能解释一下你想对涉及无限限制的整数做什么运算吗?你可以将任何意义与任何值关联起来。你甚至可以把“567”当作NaN。但是std中的任何一个命题都没有(本机)支持。问题是:你想实现什么?实际上我正在实现定点人工智能,我正在尝试为我的定点类型定义正无穷大和负无穷大。我的不动点是一种积分类型,所以当我讨论如何定义它的正无穷大和负无穷大时,我产生了这样一个疑问:对于积分类型,最大值和无穷大值之间的区别是什么?你可以在你的不动点数学中定义无穷大值,但让它成为std::numeric_limits::max()也许同样好
(它是负的对应物)-这真的取决于你计划做什么,以及你打算如何处理“无限”——例如“无限+无限=无限”?你认为NaN
“不是一个数字”吗?我认为这不是一个正确的解释,因为-1/0
和1/0
一样会返回NaN
。不,NaN是不同的。请参阅上面我添加的报价(太大,无法发表评论)。(NaN是一种类似的编码,但分数是非零的,实际上NaN有多个变体)。很好的解释,谢谢。我的答案中有什么遗漏吗?