c ++中积分类型的正负无穷大

时间:2013-05-03 09:49:26

标签: c++ types infinity numeric-limits

我正在阅读c ++中的正负无穷大。

我读到整数类型没有无限值,即。 std::numeric_limits<int>::infinity();无效,但std::numeric_limits<int>::max();将起作用,并将代表整数类型可以表示的最大可能值。

所以整数类型的std::numeric_limits<int>::max();可以作为positive infinite limit吗?

或者整数类型只有max valueinfinity value不是真的?

2 个答案:

答案 0 :(得分:3)

整数总是有限的。

你能找到的最接近的是通过设置一个整数到它的最大值,对于有符号整数,它只有大约20亿的东西。

std :: numeric_limits有一个has_infinity成员,你可以用它来检查你想要的类型是否具有无限表示,这通常只在浮点数上,例如float和double。

答案 1 :(得分:2)

浮点数具有特殊的位模式,表示“值为无穷大”,当某些操作的结果定义为无限时使用。

整数值具有设定的位数,所有位用于表示数值。没有“特殊位模式”,它只是位位置的总和意味着什么。

编辑:在我的AMD64架构程序员手册的硬拷贝的第315页上,它说

  

无穷大。无穷大是正数或负数+∞和   -∞,其中整数位为1,偏置指数为最大值,分数为0.无穷大是最大数字   可以浮点格式表示,负无穷小   比任何有限数和正无穷大都要大于任何有限数   有限数(即仿射意义)。

     

当非零,非无限数时,产生无限结果   除以0或乘以无穷大,或加入无穷大时   无穷大或为0.算术无穷大是准确的。例如,添加   任何浮点数到+∞都会得到+∞的结果   算术比较在无穷大上正常工作。出现例外情况   只有当使用无穷大作为源操作数构成一个   无效的操作。

(任何输入错误都是我的)