在 C++ 中检查 double 是否等于负无穷大的最佳方法

Best way to check if double equals negative infinity in C++

我发现了这个:http://en.cppreference.com/w/cpp/numeric/math/isinf 但它似乎检查正无穷大或负无穷大。我只想检查一个值是否正好等于负无穷大,或者换句话说是 log(0)

感谢解答!根据下面的回复,这里有一些代码可以说明什么有效。

#include <iostream>
#include <cmath>
#include <math.h>
using namespace std;
int main()
{
    double c = std::log(0.0);
    auto result = c == - INFINITY;
    cout << result << endl;
    return 0;
}

x == -1.0 / 0.0

这个表达式的计算结果为真当且仅当 x 是负无穷大。

如果你愿意包含cmath,那么x == - INFINITY的可读性更高。

假设浮点类型映射到 IEEE 754 格式,那么它们各自都有自己的无穷大。 1.0 / 0.0double 无穷大。 INFINITY 的类型并不重要,因为“通常的算术转换”将负责匹配 ==.

的左侧和右侧的类型

显而易见和明确的怎么样?

要检查 double x 是否为负无穷大,请检查

x == -std::numeric_limits<double>::infinity()

如果 x 是其他浮点类型,请适当更改 double

std::numeric_limits 在标准头文件 <limits> 中定义。不要忘记将它添加到您的 #include 列表中。