C 参考手册

位置:首页 > C 参考手册 >数值 >常用数学函数 > fpclassify

定义于头文件 <math.h>
#define fpclassify(arg) /* implementation defined */
(C99 起)

归类浮点值 arg 到下列类别中:零、非正规、正规、无穷大、 NaN 或实现定义类别。该宏返回整数值。

忽略 FLT_EVAL_METHOD :即使以多于参数类型的范围和精度对它求值,首先仍将它转换到其语义类型,然后分类基于该类型:正规的 long double 值可能在转换到 double 时变为非正规,而在转换到 float 时变为零。

参数

arg - 浮点值

返回值

指明 arg 类别的 FP_INFINITEFP_NANFP_NORMALFP_SUBNORMALFP_ZERO 或实现定义类型之一。

示例

#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

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.3.1 The fpclassify macro (p: 235)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.3.1 The fpclassify macro (p: 216)

参阅

检查给定数是否具有有限值
(宏函数)
(C99)
检查给定数是否是无穷大
(宏函数)
(C99)
检查给定数是否为 NaN
(宏函数)
检查给定数是否正规
(宏函数)