命名空间
变体
操作

std::fpclassify

来自 cppreference.com
< cpp‎ | numeric‎ | math
 
 
 
常见数学函数
函数
基本操作
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指数函数
(C++11)
(C++11)

(C++11)
(C++11)
幂函数
(C++11)
(C++11)
三角函数
双曲函数
(C++11)
(C++11)
(C++11)

误差函数和伽马函数
(C++11)
(C++11)
(C++11)
(C++11)
最接近整数的浮点数操作
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮点数操作函数
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分类和比较
fpclassify
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型
(C++11)
(C++11)
(C++11)
宏常量
分类
(C++11)(C++11)(C++11)(C++11)(C++11)


 
在头文件 <cmath> 中定义
(1)
int fpclassify( float num );

int fpclassify( double num );

int fpclassify( long 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 无限定浮点数类型提供了 std::fpclassify 的重载,作为参数 num 的类型。 (自 C++23 起)
A) 为所有整数类型提供了附加重载,它们被视为 double

内容

[编辑] 参数

num - 浮点数或整数值

[编辑] 返回值

其中之一 FP_INFINITEFP_NANFP_NORMALFP_SUBNORMALFP_ZERO 或实现定义的类型,指定 num 的类别。

[编辑] 说明

附加重载不需要完全按 (A) 提供。它们只需要足够确保对于整数类型的参数 numstd::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 "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()
{
    std::cout << "1.0/0.0 is " << show_classification(1 / 0.0) << '\n'
              << "0.0/0.0 is " << show_classification(0.0 / 0.0) << '\n'
              << "DBL_MIN/2 is " << show_classification(DBL_MIN / 2) << '\n'
              << "-0.0 is " << show_classification(-0.0) << '\n'
              << "1.0 is " << show_classification(1.0) << '\n';
}

输出

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

[编辑] 参见

(C++11)
检查给定数字是否具有有限值
(函数) [编辑]
(C++11)
检查给定数字是否为无穷大
(函数) [编辑]
(C++11)
检查给定数字是否为 NAN
(函数) [编辑]
(C++11)
检查给定数字是否为正规数
(函数) [编辑]
提供了一个接口来查询所有基本数值类型的属性
(类模板) [编辑]
C 文档 for fpclassify