_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 |
+ |