Назад к вопросам
Junior
91
questionbank

Как можно проверить, что нет исключений при работе с типом double?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Можно использовать std::isfinite, std::isinf и std::isnan из <cmath>.

#include <cmath>    // Для isfinite, isinf, isnan
#include <limits>   // Для numeric_limits
#include <iostream>

int main() {
    double normal_value = 123.45;
    double inf_value = std::numeric_limits<double>::infinity();
    double nan_value = std::numeric_limits<double>::quiet_NaN();

    // Проверка на конечное число
    if (std::isfinite(normal_value)) {
        std::cout << "normal_value является конечным числом\n";
    }

    // Проверка на бесконечность
    if (std::isinf(inf_value)) {
        std::cout << "inf_value является бесконечностью\n";
    }

    // Проверка на NaN
    if (std::isnan(nan_value)) {
        std::cout << "nan_value является NaN\n";
    }

    return 0;
}

std::isfinite(x) возвращает true, если x не является ни бесконечностью (+/-inf), ни NaN. std::isinf(x) возвращает true, если x является бесконечностью (+/-inf). std::isnan(x) возвращает true, если x является Not-a-Number (не числом).

Эти функции позволяют выявлять специальные значения с плавающей точкой, которые могут быть результатом некорректных операций (например, деления на ноль или sqrt(-1)) и обрабатываются стандартом IEEE 754, а не исключениями в привычном смысле.