当前位置: C语言 -- 标准库 -- <math.h> -- fpclassify

fpclassify宏


概要:
#include <math.h>
int fpclassify(real-floating x);

描述:

该宏是函数式宏(function-like macro),将参数分类为非数值(NaN)、无穷大(infinite)、规格化数(normal number)、次规格化数(subnormal number)、0(zero)或者一个由实现定义的类别。

分类时,如果参数x的表示形式宽于real-floating类型,将转换成real-floating类型;然后再根据real-floating类型进行分类。

使用该宏进行分类时,知道分类所依据的参数类型(real-floating)非常重要,因为用于评估表达式的范围和精度可能高于参数类型(real-floating),例如:long double类型规格化数转换为double类型时可能成为次规格化数。


参数:
real-floating x

参数x应为实数浮点类型表达式,例如:floatdoublelong double类型表达式。


返回值:

该宏返回与其参数值相对应的数字分类宏的值,例如:FP_INFINITEFP_NANFP_NORMALFP_SUBNORMALFP_ZERO等。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
/*宏fpclassify范例*/

#include <float.h>
#include <math.h>
#include <stdio.h>

int main(void)
{
    double num = DBL_MIN/2;

    switch(fpclassify(num))
    {
        case FP_INFINITE:
            puts("Infinity");
            break;
        case FP_NAN:
            puts("NaN");
            break;
        case FP_NORMAL:
            puts("Normal number");
            break;
        case FP_SUBNORMAL:
            puts("Subnormal number");
            break;
        case FP_ZERO:
            puts("Zero");
            break;
        default:
            puts("Unknown category");
            break;
    }

    return 0;
}

输出:

Subnormal number

注:使用Visual Studio编译。


相关内容:
FP_INFINITE 表示浮点类别无穷大的宏。
FP_NAN 表示浮点类别非数值的宏。
FP_NORMAL 表示浮点类别规格化数的宏。
FP_ZERO 表示浮点类别0的宏。
FP_SUBNORMAL 表示浮点类别次规格化数的宏。