在 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.0
是 double
无穷大。 INFINITY
的类型并不重要,因为“通常的算术转换”将负责匹配 ==
.
的左侧和右侧的类型
显而易见和明确的怎么样?
要检查 double x
是否为负无穷大,请检查
x == -std::numeric_limits<double>::infinity()
如果 x
是其他浮点类型,请适当更改 double
。
std::numeric_limits
在标准头文件 <limits>
中定义。不要忘记将它添加到您的 #include
列表中。
我发现了这个: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.0
是 double
无穷大。 INFINITY
的类型并不重要,因为“通常的算术转换”将负责匹配 ==
.
显而易见和明确的怎么样?
要检查 double x
是否为负无穷大,请检查
x == -std::numeric_limits<double>::infinity()
如果 x
是其他浮点类型,请适当更改 double
。
std::numeric_limits
在标准头文件 <limits>
中定义。不要忘记将它添加到您的 #include
列表中。