_fpclass、_fpclassl
float.h:インデックス への移動
ヘッダー ファイル
float.h
カテゴリ
数値計算ルーチン
プロトタイプ
int _fpclass(double d);
int _fpclassl(long double ld);
説明
IEEE 倍精度実数の型(クラス)を表す整数値を返します。 この値には、引数として渡された浮動小数点クラスの情報が含まれます。
_fpclassl はその long double 版で、long double の引数を受け取り、long double 用の IEEE 実数の型(クラス)を返します。
戻り値
引数の浮動小数点クラスを示す整数値を返します。 取り得る値(次の表を参照してください)は FLOAT.H で定義されています。
_FPCLASS_UNSUP |
サポートされていない IEEE 形式 |
_FPCLASS_SNAN |
シグナリング NaN |
_FPCLASS_QNAN |
クワイエット NaN |
_FPCLASS_NINF |
負の無限大 |
_FPCLASS_NN |
正規化された負の非ゼロ |
_FPCLASS_ND |
負の非正規化数 |
_FPCLASS_NZ |
負のゼロ(-0.0) |
_FPCLASS_PZ |
正のゼロ(+0.0) |
_FPCLASS_PD |
正の非正規化数 |
_FPCLASS_PN |
正規化された正の非ゼロ |
_FPCLASS_PINF |
正の無限大 |
例
#include <float.h> #include <stdio.h> /* Compare a and b */ int compare(double a, double b) { /* Only if both are finite. */ if (_finite(a) && _finite(b)) { if (a < b) return -1; else if (a > b) return 1; else return 0; } else { /* For infinite values check the class of the numbers */ int class_a = _fpclass(a); int class_b = _fpclass(b); /* No check the infinities and compare them */ if (class_a == _FPCLASS_NINF) { if (class_b == _FPCLASS_NINF) return 0; else return -1; } else if (class_a == _FPCLASS_PINF) { if (class_b == _FPCLASS_PINF) return 0; else return 1; } } /* Cannot find a relationship! */ return -1; }
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
_fpclass |
+ |
|||
_fpclassl |
+ |