C++ Reference: Standard C++ Library reference: C Library: cmath: fpclassify

发布于:2022-11-28 ⋅ 阅读:(423) ⋅ 点赞:(0)

C++官网参考链接:https://cplusplus.com/reference/cmath/fpclassify/

宏/函数
<cmath> <ctgmath>
fpclassify
C99
宏    
fpclassify(x)
C++11
函数
int fpclassify(float x);
int fpclassify(double x);
int fpclassify(long double x);
分类浮点值 
返回一个int类型的值,该值与分类宏常量的一个匹配,取决于x的值:

value description
FP_INFINITE Positive or negative infinity (overflow) (正无穷或负无穷(上溢))
FP_NAN Not-A-Number (不是一个数)
FP_ZERO Value of zero (0值)
FP_SUBNORMAL Sub-normal value (underflow) (低于正常值(下溢))
FP_NORMAL Normal value (none of the above) (正常值(不是上面的任何一个))

注意,每个值都属于一个类别:0不是一个正常值。
这些int类型的宏常量定义在头文件<cmath><math.h>)中。 
C99
在C语言中,这是作为宏实现的,但x的类型应该是float、double或long double。
C++11
在C++中,它是通过每个浮点类型(floating-point type)的函数重载来实现的。

形参
x
分类的值。

返回值
以下int值之一:FP_INFINITE,FP_NAN,FP_ZERO,FP_SUBNORMAL或FP_NORMAL。 

用例
/* 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;
}
输出:

另请参考
isfinite    Is finite value (macro) (是有限值(宏)) 
isnan    Is Not-A-Number (macro/function) (不是一个数(宏/函数)) 
isnormal    Is normal (macro/function) (是正常的(宏/函数)) 
signbit    Sign bit (macro/function) (符号位(宏/函数)) 

本文含有隐藏内容,请 开通VIP 后查看