我正在调试一个 C++ 程序。有一个x
double 类型的变量,gdb 将其值打印为inf
. false
然而,即使 的值x
没有改变,以下表达式也会返回
x == std::numeric_limits<double>::max()
当 gdb 说inf
时,这不是指这种类型的最大可能值(双精度)吗?如果不是,那是什么意思?
我正在调试一个 C++ 程序。有一个x
double 类型的变量,gdb 将其值打印为inf
. false
然而,即使 的值x
没有改变,以下表达式也会返回
x == std::numeric_limits<double>::max()
当 gdb 说inf
时,这不是指这种类型的最大可能值(双精度)吗?如果不是,那是什么意思?
这意味着x == std::numeric_limits<double>::infinity()
。
浮点实现不一定必须支持无穷大,但常见的 - IEEE754 - 可以。
从 C++11 开始,您可以使用std::isinf(x)
来测试浮点数是否是无限的。
不,无穷大不是最大值;从这个意义上说,它根本不是一个“价值”。
与 NaN 一样,无穷大是 IEEE754 浮点数可以采用的“特殊值”。它们中的两个表现出不寻常的属性(例如 NaN != NaN),并且不在您选择的浮点类型的数值范围内的数轴上。
尽管 1.79769e+308(std::numeric_limits<double>::max()
在我的系统上)是一个非常大的数字,但距离无穷大还有很长的路要走。介于两者之间的每一个潜在值(实际上是无限的)在这种类型中是无法表示的。“min”和“max”函数对于 的数值域没有用double
,如果它们只返回-inf
和inf
。