📜  C++ Nan()(1)

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

C++ Nan() - 介绍

在 C++ 中,NaN(Not a Number)是一种特殊的浮点值。NaN 表示不是一个数字,通常在数学计算中会产生 NaN 值。当一个浮点值无法表示或无法计算时,就会出现 NaN 值。

C++ 中提供了一个函数 Nan() 来产生 NaN 值。该函数的声明如下:

double Nan(const char* tagp = 0);

可以使用该函数来生成一个 NaN 值。当 tagp 参数为 NULL 或者空字符串时,函数生成一个 quiet NaN 值。当 tagp 参数为一个非空字符串时,函数生成一个 signaling NaN 值,并将该字符串保存到 NaN 值中的 tag 里面去。

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

int main()
{
    double x = Nan("MyNaN");
    cout << x << endl;

    double y = Nan();
    cout << y << endl;

    double z = x + y;
    cout << z << endl;

    cout << isnan(z) << endl;        // 输出 1
    cout << isnan(z + 1) << endl;    // 输出 0

    return 0;
}

上面的示例代码定义了三个 double 型变量:x、y 和 z。其中 x 是一个 signaling NaN,tag 为 "MyNaN";y 是一个 quiet NaN;z 是 x 和 y 的和。实际上,在计算 z 的过程中产生了新的 NaN 值。如果使用 isnan() 函数来判断 z 是否是 NaN,则可以得到正确的结果。

需要注意的是,NaN 值并不等于任何数,包括自己。因此,使用 == 或者 != 来进行 NaN 值的比较无效。如果需要检测一个数是否是 NaN,应该使用 isnan() 函数。

参考资料