名前空間
変種
操作

FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN

From cppreference.com
< c‎ | numeric‎ | math
 
 
 
共通の数学関数
関数
基本的な数学関数
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小演算
(C99)
(C99)
指数関数
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
(C99)(C23)
(C23)
(C23)
べき乗関数
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
三角関数と双曲線関数
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
最も近い整数浮動小数点数
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮動小数点操作
(C99)(C99)
(C99)(C23)
(C99)
縮小演算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量子および量子指数
Decimal再エンコーディング関数
総順序およびペイロード関数
分類
(C99)
(C99)
(C99)
(C23)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
(C99)
マクロ定数
特殊な浮動小数点値
(C99)(C23)
引数と戻り値
FP_NORMALFP_SUBNORMALFP_ZEROFP_INFINITEFP_NAN
(C99)(C99)(C99)(C99)(C99)
エラーハンドリング
高速演算インジケータ
 
ヘッダー <math.h> で定義
#define FP_NORMAL    /*実装依存*/
(C99以降)
#define FP_SUBNORMAL /*実装依存*/
(C99以降)
#define FP_ZERO      /*実装依存*/
(C99以降)
#define FP_INFINITE  /*実装依存*/
(C99以降)
#define FP_NAN       /*実装依存*/
(C99以降)

FP_NORMALFP_SUBNORMALFP_ZEROFP_INFINITEFP_NAN マクロは、それぞれ異なる浮動小数点数のカテゴリを表します。これらはすべて整数定数式に展開されます。

Constant 説明
FP_NORMAL 値が「正規数」であることを示します。つまり、無限大、非正規数、NaN、またはゼロではありません。
FP_SUBNORMAL 値が非正規数であることを示します。
FP_ZERO 値が正または負のゼロであることを示します。
FP_INFINITE 値が基盤となる型で表現できないこと(正または負の無限大)を示します。
FP_NAN 値が非数 (NaN) であることを示します。

[編集]

#include <stdio.h>
#include <math.h>
#include <float.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

[編集] 参照

  • C17標準 (ISO/IEC 9899:2018)
  • 7.12/6 FP_NORMAL, ... (p: 169-170)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.12/6 FP_NORMAL, ... (p: 232)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.12/6 FP_NORMAL, ... (p: 213)

[編集] 関連項目

与えられた浮動小数点値を分類する
(関数マクロ) [編集]
C++ ドキュメント (FP_categories)
English 日本語 中文(简体) 中文(繁體)