命名空间
变体
操作

std::fpclassify

来自 cppreference.cn
< 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( /* floating-point-type */ num );
(自 C++23 起)
定义于头文件 <cmath>
template< class Integer >
int fpclassify( Integer num );
(A) (自 C++11 起)
(constexpr 自 C++23 起)
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 文档 关于 fpclassify