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) |
检查给定数字是否为正常数 (函数宏) |