1

我正在调试一个 C++ 程序。有一个xdouble 类型的变量,gdb 将其值打印为inf. false然而,即使 的值x没有改变,以下表达式也会返回

x == std::numeric_limits<double>::max()

当 gdb 说inf时,这不是指这种类型的最大可能值(双精度)吗?如果不是,那是什么意思?

4

2 回答 2

3

这意味着x == std::numeric_limits<double>::infinity()

浮点实现不一定必须支持无穷大,但常见的 - IEEE754 - 可以。

从 C++11 开始,您可以使用std::isinf(x)来测试浮点数是否是无限的。

于 2016-06-21T15:25:24.293 回答
3

不,无穷大不是最大值;从这个意义上说,它根本不是一个“价值”。

与 NaN 一样,无穷大是 IEEE754 浮点数可以采用的“特殊值”。它们中的两个表现出不寻常的属性(例如 NaN != NaN),并且不在您选择的浮点类型的数值范围内的数轴上。

尽管 1.79769e+308(std::numeric_limits<double>::max()在我的系统上)是一个非常大的数字,但距离无穷大还有很长的路要走。介于两者之间的每一个潜在值(实际上是无限的)在这种类型中是无法表示的。“min”和“max”函数对于 的数值域没有用double,如果它们只返回-infinf

于 2016-06-21T15:31:30.533 回答