Назад к вопросам
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, а не исключениями в привычном смысле.