📜  C++ STL-math.fpclassify()函数(1)

📅  最后修改于: 2023-12-03 15:13:55.645000             🧑  作者: Mango

C++ STL math.fpclassify()函数

在C++中,我们可以使用math库提供的fpclassify()函数来判断浮点数的特殊情况,例如是否为NaN(非数值)、正无穷、负无穷等。

fpclassify()函数的原型如下:

int std::fpclassify(float arg);
int std::fpclassify(double arg);
int std::fpclassify(long double arg);

该函数的参数为要判断的浮点数,返回值为下列值之一:

  • FP_NAN:arg为NaN;
  • FP_INFINITE:arg为正/负无穷;
  • FP_ZERO:arg为0;
  • FP_NORMAL:arg为正/负的规格化数;
  • FP_SUBNORMAL:arg为正/负的非规格化数。

示例代码:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double x = 1.0/0.0;     //正无穷
    double y = -1.0/0.0;    //负无穷
    double z = 0.0/0.0;     //NaN
    double w = 1.0;         //规格化数
    double v = 1e-308;      //非规格化数

    cout << "fpclassify(x) = " << fpclassify(x) << endl;
    cout << "fpclassify(y) = " << fpclassify(y) << endl;
    cout << "fpclassify(z) = " << fpclassify(z) << endl;
    cout << "fpclassify(w) = " << fpclassify(w) << endl;
    cout << "fpclassify(v) = " << fpclassify(v) << endl;

    return 0;
}

输出结果为:

fpclassify(x) = 1
fpclassify(y) = 2
fpclassify(z) = 0
fpclassify(w) = 2
fpclassify(v) = 3

其中,1对应FP_INFINITE,2对应FP_ZERO,0对应FP_NAN,3对应FP_SUBNORMAL。

使用fpclassify()函数时,需要注意以下几点:

  1. 应先判断参数是否为NaN,因为NaN是特殊情况;
  2. 应先判断参数是否为无穷,因为无穷也是特殊情况;
  3. 函数的返回值是整数类型,而不是bool类型。

综上所述,C++ STL math.fpclassify()函数是一个判断浮点数特殊情况的有用工具。