7

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

2 回答 2

22

显而易见的和明确的呢?

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

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

如果x是其他一些浮点类型,double则酌情更改。

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

于 2015-02-23T21:29:55.583 回答
9

x == -1.0 / 0.0

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

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

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

于 2015-02-23T21:25:20.197 回答