宏/函数
<cmath> <ctgmath>

fpclassify

fpclassify(x)
函数
int fpclassify (float x);int fpclassify (double x);int fpclassify (long double x);
对浮点值进行分类
返回一个 int 类型的值,该值与其中一个分类宏常量匹配,具体取决于 x 的值

描述
FP_INFINITE正无穷大或负无穷大 (溢出)
FP_NAN非数字 (Not-A-Number)
FP_ZERO零值
FP_SUBNORMAL次正规值 (下溢)
FP_NORMAL正规值 (非以上任何情况)
请注意,每个值仅属于一个类别:零不是正规值。

这些 int 类型的宏常量在头文件 <cmath> (<math.h>) 中定义。

在 C 语言中, ഇത്宏实现,但 x 的类型应为 floatdoublelong double
在 C++ 中,它是为每个浮点类型通过函数重载实现的。

参数

x
要分类的值。

返回值

以下 int 值之一:FP_INFINITEFP_NANFP_ZEROFP_SUBNORMALFP_NORMAL

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* fpclassify example */
#include <stdio.h>      /* printf */
#include <math.h>       /* fpclassify, signbit, FP_* */

int main()
{
  double d = 1.0 / 0.0;
  switch (fpclassify(d)) {
    case FP_INFINITE:  printf ("infinite");  break;
    case FP_NAN:       printf ("NaN");       break;
    case FP_ZERO:      printf ("zero");      break;
    case FP_SUBNORMAL: printf ("subnormal"); break;
    case FP_NORMAL:    printf ("normal");    break;
  }
  if (signbit(d)) printf (" negative\n");
  else printf (" positive or unsigned\n");
  return 0;
}

输出

infinite positive or unsigned


另见