FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN

来自cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指数函数
(C++11)
(C++11)
(C++11)
(C++11)
幂函数
(C++11)
(C++11)
三角与双曲函数
(C++11)
(C++11)
(C++11)
误差与伽马函数
(C++11)
(C++11)
(C++11)
(C++11)
临近整数的浮点运算
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮点操作函数
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分类/比较
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
宏常量
FP_NORMALFP_SUBNORMALFP_ZEROFP_INFINITEFP_NAN
(C++11)(C++11)(C++11)(C++11)(C++11)
 
在标头 <cmath> 定义
#define FP_NORMAL    /* 由实现定义 */
(C++11 起)
#define FP_SUBNORMAL /* 由实现定义 */
(C++11 起)
#define FP_ZERO      /* 由实现定义 */
(C++11 起)
#define FP_INFINITE  /* 由实现定义 */
(C++11 起)
#define FP_NAN       /* 由实现定义 */
(C++11 起)

FP_NORMALFP_SUBNORMALFP_ZEROFP_INFINITEFP_NAN 宏各代表一个独自的浮点数类别。它们都展开成整数常量表达式。

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

示例

#include <cfloat>
#include <cmath>
#include <iostream>
 
auto show_classification(double x)
{
    switch (std::fpclassify(x))
    {
        case FP_INFINITE:
            return "无穷大";
        case FP_NAN:
            return "非数";
        case FP_NORMAL:
            return "正规值";
        case FP_SUBNORMAL:
            return "非正规值";
        case FP_ZERO:
            return "零";
        default:
            return "未知值";
    }
}
 
int main()
{
    std::cout << "1.0/0.0 是" << show_classification(1 / 0.0) << '\n'
              << "0.0/0.0 是" << show_classification(0.0 / 0.0) << '\n'
              << "DBL_MIN/2 是" << show_classification(DBL_MIN / 2) << '\n'
              << "-0.0 是" << show_classification(-0.0) << '\n'
              << "1.0 是" << show_classification(1.0) << '\n';
}

输出:

1.0/0.0 是无穷大
0.0/0.0 是非数
DBL_MIN/2 是非正规值
-0.0 是零
1.0 是正规值

参阅

归类给定的浮点值
(函数)