fpclassify(3)

FPCLASSIFY(3) Руководство программиста Linux FPCLASSIFY(3)

ИМЯ

fpclassify, isfinite, isnormal, isnan, 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():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
isnan():
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
|| _XOPEN_SOURCE
|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE
|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
isinf():
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE
|| /* версии glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

ОПИСАНИЕ

У чисел с плавающей запятой есть специальные значения, например для бесконечности или 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).

СМОТРИТЕ ТАКЖЕ

finite(3), INFINITY(3), isgreater(3), signbit(3)

2017-09-15