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

Другие вопросы по тегам