Namespaces
Variants

isnan

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
Определено в заголовке <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)
проверяет, является ли заданное число бесконечным
(функциональный макрос)
проверяет, является ли заданное число нормальным
(функциональный макрос)
проверяет, являются ли два значения с плавающей точкой неупорядоченными
(функциональный макрос)