fpclassify
来自 cppreference.com
在头文件 <math.h> 中定义 |
||
#define fpclassify(arg) /* 实现定义 */ |
(自 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++ 文档 for fpclassify
|