FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN

来自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)
量与量指数函数
十进制重编码函数
全序与载荷函数
分类
(C99)
(C99)
(C99)
(C23)
宏常量
特殊浮点值
(C99)(C23)
参数与返回值
FP_NORMALFP_SUBNORMALFP_ZEROFP_INFINITEFP_NAN
(C99)(C99)(C99)(C99)(C99)    
错误处理
(C99)    

 
在标头 <math.h> 定义
#define FP_NORMAL    /* 由实现定义 */
(C99 起)
#define FP_SUBNORMAL /* 由实现定义 */
(C99 起)
#define FP_ZERO      /* 由实现定义 */
(C99 起)
#define FP_INFINITE  /* 由实现定义 */
(C99 起)
#define FP_NAN       /* 由实现定义 */
(C99 起)

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

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

示例

#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

引用

  • C17 标准(ISO/IEC 9899:2018):
  • 7.12/6 FP_NORMAL, ... (第 169-170 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.12/6 FP_NORMAL, ... (第 232 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 7.12/6 FP_NORMAL, ... (第 213 页)

参阅

对给定的浮点值分类
(宏函数)