std::fpclassify
来自cppreference.com
在标头 <cmath> 定义
|
||
(1) | ||
int fpclassify( float num ); int fpclassify( double num ); |
(C++11 起) (C++23 前) |
|
constexpr int fpclassify( /* 浮点类型 */ num ); |
(C++23 起) | |
在标头 <cmath> 定义
|
||
template< class Integer > int fpclassify( Integer num ); |
(A) | (C++11 起) (C++23 起 constexpr) |
1) 归类浮点值 num 到下列类别中:零、非正规、正规、无穷大、NaN 或实现定义类别。标准库提供所有以无 cv 限定的浮点类型作为参数 num 的类型的
std::fpclassify
重载。 (C++23 起)A) 为所有整数类型提供额外重载,将它们当做 double。
参数
num | - | 浮点或整数值 |
返回值
指明 num 类别的 FP_INFINITE、FP_NAN、FP_NORMAL、FP_SUBNORMAL、FP_ZERO 或实现定义类型之一。
注解
额外重载不需要以 (A) 的形式提供。它们只需要能够对它们的整数类型实参 num 确保 std::fpclassify(num) 和 std::fpclassify(static_cast<double>(num)) 的效果相同。
示例
运行此代码
#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) |
检查给定数是否拥有有限值 (函数) |
(C++11) |
检查给定数是否为无限 (函数) |
(C++11) |
检查给定的数是否 NaN (函数) |
(C++11) |
检查给定数是否正规 (函数) |
提供查询所有基础数值类型的性质的接口。 (类模板) |