我发现了这个: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;
}
答案 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.0
是double
无穷大。 INFINITY
的类型并不重要,因为“通常的算术转换”将负责匹配==
的左侧和右侧的类型。