我需要在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/