isnan - макросы классификации чисел с
isnan(3)
макросы классификации чисел с
Other Alias
fpclassify, isfinite, isnormal, isinf
ОБЗОР
#include <math.h>
int fpclassify(x);
int isfinite(x);
int isnormal(x);
int isnan(x);
int isinf(x);
Компонуется при указании параметра -lm.
Требования макроса тестирования свойств для glibc
(см. feature_test_macros(7)):
fpclassify(), isfinite(), isnormal():
_XOPEN_SOURCE >= 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L;
или
cc -std=c99
isnan():
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE || _ISOC99_SOURCE ||
_POSIX_C_SOURCE >= 200112L;
или
cc -std=c99
isinf():
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE
|| _POSIX_C_SOURCE >= 200112L;
или
cc -std=c99
ОПИСАНИЕ
У чисел с плавающей запятой есть специальные значения, например для
бесконечности или NaN. С помощью макроса
fpclassify(x) вы можете
выяснить тип
x. В качестве аргумента макрос принимает любое выражение с
плавающей запятой. Результатом будет одно из следующих значений:
FP_NAN
Значение x не является числом («Not a Number»).
FP_INFINITE
Значение x стремится к плюс или минус бесконечности.
FP_ZERO
Значение x равно нулю.
FP_SUBNORMAL
Значение x слишком мало для представления в нормализованном формате.
FP_NORMAL
Если значение не равно ни одному из вышеперечисленных, то это обычное число
с плавающей запятой.
Остальные макросы предоставляют короткие ответы на некоторые стандартные
вопросы.
isfinite(x)
возвращает ненулевое значение, если
(fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE)
isnormal(x)
возвращает ненулевое значение, если (fpclassify(x) == FP_NORMAL)
isnan(x)
возвращает ненулевое значение, если (fpclassify(x) == FP_NAN)
isinf(x)
возвращает 1, если x равно положительной бесконечности и -1, если x
равно отрицательной бесконечности.
АТРИБУТЫ
Описание терминов данного раздела смотрите в
attributes(7).
Интерфейс Атрибут Значение
fpclassify(),
isfinite(),
isnormal(),
isnan(),
isinf()
безвредность в потоках: безвредно (MT-Safe)
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008, C99.
Про isinf() в стандартах лишь сказано, что этот макрос возвращает
ненулевое значение, если только аргумент равен бесконечности.
ЗАМЕЧАНИЯ
В glibc 2.01 и более ранних
isinf() возвращает ненулевое значение (а
именно 1), если
x равно положительной или отрицательной бесконечности
(это всё, что требует C99).