FP_NORMAL, FP_SUBNORMAL, FP_ZERO, FP_INFINITE, FP_NAN
来自cppreference.com
| 在标头 <cmath> 定义
|
||
#define FP_NORMAL /* 由实现定义 */ |
(C++11 起) | |
#define FP_SUBNORMAL /* 由实现定义 */ |
(C++11 起) | |
#define FP_ZERO /* 由实现定义 */ |
(C++11 起) | |
#define FP_INFINITE /* 由实现定义 */ |
(C++11 起) | |
#define FP_NAN /* 由实现定义 */ |
(C++11 起) | |
FP_NORMAL、FP_SUBNORMAL、FP_ZERO、FP_INFINITE、FP_NAN 宏各代表一个独自的浮点数类别。它们都展开成整数常量表达式。
| 常量 | 解释 |
FP_NORMAL
|
指示值为正规 值,即不是无穷大、非正规、非数或零 |
FP_SUBNORMAL
|
指示值为非正规 值 |
FP_ZERO
|
指示值为正或负零 |
FP_INFINITE
|
指示值无法以底层类型表示(正或负无穷大) |
FP_NAN
|
指示值是非数(NaN) |
示例
运行此代码
#include <cfloat>
#include <cmath>
#include <iostream>
auto show_classification(double x)
{
switch (std::fpclassify(x))
{
case FP_INFINITE:
return "无穷大";
case FP_NAN:
return "非数";
case FP_NORMAL:
return "正规值";
case FP_SUBNORMAL:
return "非正规值";
case FP_ZERO:
return "零";
default:
return "未知值";
}
}
int main()
{
std::cout << "1.0/0.0 是" << show_classification(1 / 0.0) << '\n'
<< "0.0/0.0 是" << show_classification(0.0 / 0.0) << '\n'
<< "DBL_MIN/2 是" << show_classification(DBL_MIN / 2) << '\n'
<< "-0.0 是" << show_classification(-0.0) << '\n'
<< "1.0 是" << show_classification(1.0) << '\n';
}
输出:
1.0/0.0 是无穷大
0.0/0.0 是非数
DBL_MIN/2 是非正规值
-0.0 是零
1.0 是正规值
参阅
(C++11) |
归类给定的浮点数 (函数) |
FP_categories 的 C 文档
| |