名前
fpclassify, isfinite, isnormal, isnan - 浮動小数点数の分類マクロ
書式
#include <math.h>
int fpclassify(x);
int isfinite(x);
int isnormal(x);
int isnan(x);
int isinf(x);
-std=c99 でコンパイルし、-lm でリンクする。
説明
浮動小数点数は無限や NaN のような特別な値を持つことができる。 マクロ fpclassify(x) で x がどのようなタイプであるかを知ることができる。 マクロは任意の浮動小数点数表現を引き数としてとることができる。 結果は以下の値のいずれか一つである:
FP_NAN | x が "Not a Number" である (数値ではない)。 |
FP_INFINITE | |
x が正または負の無限大である。 | |
FP_ZERO | |
x が 0 である。 | |
FP_SUBNORMAL | |
x を正規化形式で表現するには小さすぎる。 | |
FP_NORMAL | |
上記のどれにも当てはまらない場合であり、 値は通常の浮動小数点数であるはずだ。 | |
他のマクロは、いくつかの標準的な問いに対して、簡単な答えを提供する。 | |
isfinite(x) | |
(fpclassify(x) != FP_NAN && fpclassify(x) != FP_INFINITE) の場合に 0 以外の値を返す。 | |
isnormal(x) | |
(fpclassify(x) == FP_NORMAL) の場合に 0 以外の値を返す。 | |
isnan(x) | |
(fpclassify(x) == FP_NAN) の場合に 0 以外の値を返す。 | |
isinf(x) | |
x が正の無限大の場合は 1 を、 負の無限大の場合は -1 を返す。 | |
準拠
C99
注意
glibc 2.01 以前では、 isinf() は x が無限大の場合 (正でも負でも) 0 以外の値 (実際には 1) を返す。 (C99 の要求仕様で決まっているのは 0 以外の値を返すということだけである。)