fpclassify
来自 cppreference.cn
定义于头文件 <math.h> |
||
#define fpclassify(arg) /* implementation defined */ |
(C99 起) | |
将浮点数值 arg 归类为以下类别之一:零、次正规、正规、无穷大、NAN 或实现定义的类别。该宏返回一个整数值。
FLT_EVAL_METHOD 会被忽略:即使参数以超出其类型的范围和精度进行求值,它也会首先转换为其语义类型,并且分类基于该类型:一个正规的 long double 值在转换为 double 时可能变为次正规,而在转换为 float 时可能变为零。
目录 |
[编辑] 参数
arg | - | 浮点数值 |
[编辑] 返回值
以下之一:FP_INFINITE、FP_NAN、FP_NORMAL、FP_SUBNORMAL、FP_ZERO 或实现定义的类型,指定 arg 的类别。
[编辑] 示例
运行此代码
#include <float.h> #include <math.h> #include <stdio.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
[编辑] 参考
- C23 标准 (ISO/IEC 9899:2024)
- 7.12.3.1 fpclassify 宏 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018)
- 7.12.3.1 fpclassify 宏 (p: TBD)
- C11 标准 (ISO/IEC 9899:2011)
- 7.12.3.1 fpclassify 宏 (p: 235)
- C99 标准 (ISO/IEC 9899:1999)
- 7.12.3.1 fpclassify 宏 (p: 216)
[编辑] 参见
(C99) |
检查给定的数值是否为有限值 (函数宏) |
(C99) |
检查给定的数值是否为无穷大 (函数宏) |
(C99) |
检查给定的数值是否为 NaN (函数宏) |
(C99) |
检查给定的数值是否为正规 (函数宏) |
C++ 文档 关于 fpclassify
|