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) (符号位(宏/函数))