📜  C C++中的fpclassify()方法与示例(1)

📅  最后修改于: 2023-12-03 14:59:35.932000             🧑  作者: Mango

C/C++中的fpclassify()方法

fpclassify()是C/C++中定义在math.h头文件中的一个函数,用于判断浮点数的类型。

该函数接受一个浮点数作为参数,返回值是一个整数,代表该浮点数的类型。

fpclassify() 的返回值代表的类型如下:

|返回值|代表的类型| |--|--| |FP_NAN|无穷大(INF)、NaN(不是数字)| |FP_INFINITE|正无穷,负无穷| |FP_ZERO|0| |FP_SUBNORMAL|接近0,但不为0的很小的数| |FP_NORMAL|既不是无穷大也不是0的数|

代码示例
#include <cmath>
#include <iostream>

using namespace std;

int main()
{
    double num1 = 1.0 / 0.0;
    double num2 = 0.0 / 0.0;
    double num3 = 1e-300;

    cout << "num1: ";
    switch(fpclassify(num1))
    {
    case FP_NAN:
        cout << "NaN" << endl;
        break;
    case FP_INFINITE:
        cout << "infinite" << endl;
        break;
    case FP_ZERO:
        cout << "zero" << endl;
        break;
    case FP_SUBNORMAL:
        cout << "subnormal" << endl;
        break;
    case FP_NORMAL:
        cout << "normal" << endl;
        break;
    }

    cout << "num2: ";
    switch(fpclassify(num2))
    {
    case FP_NAN:
        cout << "NaN" << endl;
        break;
    case FP_INFINITE:
        cout << "infinite" << endl;
        break;
    case FP_ZERO:
        cout << "zero" << endl;
        break;
    case FP_SUBNORMAL:
        cout << "subnormal" << endl;
        break;
    case FP_NORMAL:
        cout << "normal" << endl;
        break;
    }

    cout << "num3: ";
    switch(fpclassify(num3))
    {
    case FP_NAN:
        cout << "NaN" << endl;
        break;
    case FP_INFINITE:
        cout << "infinite" << endl;
        break;
    case FP_ZERO:
        cout << "zero" << endl;
        break;
    case FP_SUBNORMAL:
        cout << "subnormal" << endl;
        break;
    case FP_NORMAL:
        cout << "normal" << endl;
        break;
    }

    return 0;
}

在上面的示例中,我们分别定义了一个无穷大的数num1,一个 NaN 的数num2和一个接近0但不为0的很小的数num3,并使用fpclassify()函数分别判断它们的类型,并输出结果。

输出结果如下:

num1: infinite
num2: NaN
num3: subnormal

从输出结果可以看出,num1是一个无穷大的数,因此返回“infinite”;num2是一个 NaN 的数,因此返回“NaN”;而num3虽然很小,但不为0,因此返回“subnormal”。