Spec-Zone.ru › C

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)

См. также

nannanfnanl
(C99)(C99)(C99)
возвращает NaN («не число»)
(функция)
fpclassify
(C99)
классифицирует заданное значение с плавающей точкой
(макрос-функция)
isfinite
(C99)
проверяет, является ли заданное число конечным
(макрос-функция)
isinf
(C99)
проверяет, является ли заданное число бесконечным
(макрос-функция)
isnormal
(C99)
проверяет, является ли заданное число нормальным
(макрос-функция)
isunordered
(C99)
проверяет, являются ли два значения с плавающей точкой неупорядоченными
(макрос-функция)
Документация по C++ для isnan

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/isnan

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API