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

См. также

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/w/c/numeric/math/isnan

Spec-Zone.ru

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