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
|
|