isnan
Определено в заголовочном файле <math.h> | ||
|---|---|---|
#define isnan(arg) /* implementation defined */ | (начиная с C99) |
Определяет, является ли заданное число с плавающей точкой arg значением NaN («не число»). Макрос возвращает целочисленное значение.
FLT_EVAL_METHOD игнорируется: даже если аргумент вычисляется с большим диапазоном и точностью, чем его тип, сначала он преобразуется к своему семантическому типу, и классификация выполняется на его основе (это важно, если тип вычисления поддерживает NaN, а семантический тип — нет).
Параметры
| arg | - | значение с плавающей точкой |
Возвращаемое значение
Ненулевое целочисленное значение, если arg является NaN, иначе 0.
Примечания
Существует множество различных значений NaN с разными битами знака и полезной нагрузкой; см. nan.
Значения NaN никогда не равны сами себе или другим значениям NaN. При копировании NaN его битовое представление может измениться.
Ещё один способ проверить, является ли значение с плавающей точкой NaN, — сравнить его с самим собой: bool is_nan(double x) { return x != x; }
Пример
#include <float.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
printf("isnan(NAN) = %d\n", isnan(NAN));
printf("isnan(INFINITY) = %d\n", isnan(INFINITY));
printf("isnan(0.0) = %d\n", isnan(0.0));
printf("isnan(DBL_MIN/2.0) = %d\n", isnan(DBL_MIN / 2.0));
printf("isnan(0.0 / 0.0) = %d\n", isnan(0.0 / 0.0));
printf("isnan(Inf - Inf) = %d\n", isnan(INFINITY - INFINITY));
}
Возможный вывод:
isnan(NAN) = 1 isnan(INFINITY) = 0 isnan(0.0) = 0 isnan(DBL_MIN/2.0) = 0 isnan(0.0 / 0.0) = 1 isnan(Inf - Inf) = 1
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.12.3.4 Макрос isnan (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.12.3.4 Макрос isnan (стр.: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.12.3.4 Макрос isnan (стр.: 236–237)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.12.3.4 Макрос isnan (стр.: 217)
См. также
|
(C99)(C99)(C99) | возвращает NaN («не число») (функция) |
|
(C99) | классифицирует заданное значение с плавающей точкой (макрос-функция) |
|
(C99) | проверяет, является ли заданное число конечным (макрос-функция) |
|
(C99) | проверяет, является ли заданное число бесконечным (макрос-функция) |
|
(C99) | проверяет, является ли заданное число нормальным (макрос-функция) |
|
(C99) | проверяет, являются ли два значения с плавающей точкой неупорядоченными (макрос-функция) |
Документация по C++ для isnan |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/isnan