fpclassify

来自cppreference.com
< c‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
指数函数
(C99)
(C99)
(C99)
(C99)
幂函数
(C99)
(C99)
三角及双曲函数
(C99)
(C99)
(C99)
误差及伽马函数
(C99)
(C99)
(C99)
(C99)
临近整数的浮点运算
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)
浮点数操作函数
(C99)
(C99)
(C99)
(C99)
分类
fpclassify
(C99)
(C99)
(C99)
(C99)
宏常量
 
定义于头文件 <math.h>
#define fpclassify(arg) /* implementation defined */
(C99 起)

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

FLT_EVAL_METHOD被忽略:即使参数求值结果大于其类型的范围和精度,它首先还是会被转换到其语义类型,而分类基于该类型:一个正规的long double值可能在转换到double时变得非正规,而且在转换到float时变成零。

目录

[编辑] 参数

arg - 浮点值

[编辑] 返回值

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

[编辑] 示例

#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
(函数) [编辑]
检查给定数是否正规
(函数) [编辑]
fpclassifyC++ 文档