Лучший способ проверить, равен ли double отрицательная бесконечность в 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;
}
2 ответа
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
список.