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

时间:2015-02-23 21:22:42

标签: c++ c++11 numerical numerical-computing

我发现了这个: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;
}

2 个答案:

答案 0 :(得分:10)

明显和明确的怎么样?

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

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

如果x是其他某种浮点类型,请根据需要更改double

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

答案 1 :(得分:5)

x == -1.0 / 0.0

如果x为负无穷大,则此表达式的计算结果为真。

如果您愿意加入cmath,则x == - INFINITY更具可读性。

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