fpclassify
From cppreference.com
| ヘッダー <math.h> で定義 |
||
| #define fpclassify(arg) /* 実装定義 */ |
(C99以降) | |
浮動小数点値 arg を、ゼロ、非正規数、正規数、無限大、NaN、または実装定義のカテゴリに分類します。マクロは整数値を返します。
FLT_EVAL_METHOD は無視されます。引数がその型よりも広い範囲と精度で評価されたとしても、まずその意味論的な型に変換され、その結果に基づいて分類が行われます。たとえば、正規な long double 値は、double に変換されると非正規数になり、float に変換されるとゼロになる可能性があります。
目次 |
[編集] パラメータ
| arg | - | floating-point value |
[編集] 戻り値
FP_INFINITE、FP_NAN、FP_NORMAL、FP_SUBNORMAL、FP_ZERO、または実装定義の型。これは arg のカテゴリを指定します。
[編集] 例
このコードを実行
#include <float.h> #include <math.h> #include <stdio.h> const char* show_classification(double x) { switch(fpclassify(x)) { case FP_INFINITE: return "Inf"; case FP_NAN: return "NaN"; case FP_NORMAL: return "normal"; case FP_SUBNORMAL: return "subnormal"; case FP_ZERO: return "zero"; default: return "unknown"; } } int main(void) { printf("1.0/0.0 is %s\n", show_classification(1 / 0.0)); printf("0.0/0.0 is %s\n", show_classification(0.0 / 0.0)); printf("DBL_MIN/2 is %s\n", show_classification(DBL_MIN / 2)); printf("-0.0 is %s\n", show_classification(-0.0)); printf("1.0 is %s\n", show_classification(1.0)); }
出力
1.0/0.0 is Inf 0.0/0.0 is NaN DBL_MIN/2 is subnormal -0.0 is zero 1.0 is normal
[編集] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 7.12.3.1 The fpclassify macro (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.12.3.1 The fpclassify macro (p: TBD)
- C11標準 (ISO/IEC 9899:2011)
- 7.12.3.1 The fpclassify macro (p: 235)
- C99標準 (ISO/IEC 9899:1999)
- 7.12.3.1 The fpclassify macro (p: 216)
[編集] 関連項目
| (C99) |
与えられた数値が有限値かチェックする (関数マクロ) |
| (C99) |
与えられた数値が無限大かチェックする (関数マクロ) |
| (C99) |
与えられた数値が NaN かチェックする (関数マクロ) |
| (C99) |
与えられた数値が正規化数かチェックする (関数マクロ) |
| C++ ドキュメント for fpclassify
| |