fpclassify

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
类型
(C99)(C99)    

(C99)(C99)    

函数
基本运算
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
最大/最小运算
(C99)
(C23)    
指数函数
(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)
(C99)
(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
浮点操作函数
(C99)(C99)
(C99)(C23)
(C99)
窄化运算
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
量与量指数函数
十进制重编码函数
全序与载荷函数
分类
fpclassify
(C99)
(C99)
(C99)
(C99)
(C23)
宏常量
特殊浮点值
(C99)(C23)
参数与返回值
(C99)(C99)(C99)(C99)(C99)    
错误处理
(C99)    

 
在标头 <math.h> 定义
#define fpclassify(arg) /* 由实现定义 */
(C99 起)

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

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

参数

arg - 浮点值

返回值

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

示例

#include <float.h>
#include <math.h>
#include <stdio.h>
 
const char *show_classification(double x)
{
    switch(fpclassify(x))
    {
        case FP_INFINITE:  return "Inf";
        case FP_NAN:       return "NaN";
        case FP_NORMAL:    return "正规";
        case FP_SUBNORMAL: return "非正规";
        case FP_ZERO:      return "零";
        default:           return "未知";
    }
}
int main(void)
{
    printf("1.0/0.0 为 %s\n", show_classification(1 / 0.0));
    printf("0.0/0.0 为 %s\n", show_classification(0.0 / 0.0));
    printf("DBL_MIN/2 为 %s\n", show_classification(DBL_MIN / 2));
    printf("-0.0 为 %s\n", show_classification(-0.0));
    printf("1.0 为 %s\n", show_classification(1.0));
}

输出:

1.0/0.0 为 Inf
0.0/0.0 为 NaN
DBL_MIN/2 为 非正规
-0.0 为 零
1.0 为 正规

引用

  • C23 标准(ISO/IEC 9899:2024):
  • 7.12.3.1 The fpclassify macro (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 7.12.3.1 The fpclassify macro (第 TBD 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.12.3.1 The fpclassify macro (第 235 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.12.3.1 The fpclassify macro (第 216 页)

参阅

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