# FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN

< cpp‎ | numeric‎ | math

定义于头文件 `<cmath>` |  |
#define FP_NORMAL /*implementation defined*/ |  | (C++11 起)
#define FP_SUBNORMAL /*implementation defined*/ |  | (C++11 起)
#define FP_ZERO /*implementation defined*/ |  | (C++11 起)
#define FP_INFINITE /*implementation defined*/ |  | (C++11 起)
#define FP_NAN /*implementation defined*/ |  | (C++11 起)

`FP_NORMAL` 、 `FP_SUBNORMAL` 、 `FP_ZERO` 、 `FP_INFINITE` 、 `FP_NAN` 宏各代表一个独自的浮点数类别。它们都展开成整数常量表达式。

常量 | 解释
`FP_NORMAL` | 指示值为正规，即不是无穷大、非正规、非数或零
`FP_SUBNORMAL` | 指示值为非正规
`FP_ZERO` | 指示值为正或负零
`FP_INFINITE` | 指示值无法以底层类型表示（正或负无穷大）
`FP_NAN` | 指示值是非数（ NaN ）

### 示例

    #include <iostream>
    #include <cmath>
    #include <cfloat>

    const char* show_classification(double x) {
        switch(std::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()
    {
        std::cout << "1.0/0.0 is " << show_classification(1/0.0) << '\n'
                  << "0.0/0.0 is " << show_classification(0.0/0.0) << '\n'
                  << "DBL_MIN/2 is " << show_classification(DBL_MIN/2) << '\n'
                  << "-0.0 is " << show_classification(-0.0) << '\n'
                  << "1.0 is " << show_classification(1.0) << '\n';
    }

输出：

    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

### 参阅

fpclassify (C++11) | 归类给定的浮点值 (函数)