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 <stdio.h>
#include <math.h>
#include <float.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
Справочные материалы
- Стандарт 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/w/c/numeric/math/isnan