我需要在Linux上的C++应用程序中检查无穷大的 double 值。在大多数平台上,这可以通过与std::numeric_limits<double>::infinity()进行比较来实现。但是,在某些旧平台上(例如RedHat 9,使用gcc 3.2.2),此功能不可用,并且std::numeric_limits<double>::has_infinity在此处为false。

您会为这些平台推荐什么解决方法?

最佳答案

如果您使用IEEE 754算术(几乎可以肯定),则无穷大是定义明确的值,并且已为所有算术运算定义了结果。特别是,

infinity - infinity = NaN

正负无穷大和NaN值是唯一适用于此的值。 NaN是特殊的“非数字”值,用于表示函数的域错误,例如sqrt(-1)。也:
NaN != NaN
NaN是唯一适用于此的值。

因此:
bool is_infinite(double x) {
    double y = x - x;
    return x == x && y != y;
}

当且仅当x是正无穷大或负无穷大时,才会返回true。如果只想检查正无穷大,请添加x > 0测试。

关于c++ - 如果numeric_limits <double>::has_infinity is false?,建议的解决方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/447520/

10-16 23:06