检查数字是否为NaN失败

Checking if a number is NaN fails

本文关键字:NaN 失败 是否 数字 检查      更新时间:2023-10-16

给定以下问题除以零预防和检查它是否是NaN作为示例,我编写了以下代码:

#include <cstdlib>
#include <iostream>
#include <map>
#include <windows.h>
using namespace std;
bool IsNonNan( float fVal )
{ 
     return( fVal == fVal );
}
int main(int argc, char *argv[])
{
    int nQuota = 0;
    float fZero = 3 / (float)nQuota; 
    cout << fZero << endl;
    cout << IsNonNan( fZero ) << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

为什么IsNonNan返回true?为什么int nZero = 3 / (float)nQuota;会输出:-2147483648

3 / 0+INF,而不是NaN。尝试0 / 0

Not,is Not,NaN表示"不是一个数字",它的意思是,不能用数字表示的东西(像0 / 0这样的不确定性,从数学上讲,没有数字表示),无穷大,就是无限大,正或负

要检查浮点是否无穷大,可以使用:

inline bool IsInf(float fval)  {
    return (fval == fval) && ((fval - fval) != 0.0f);
}

int nZero = 3 / (float)nQuota;输出-2147483648,因为0float的转换值为<=CCD_ 13,其在整个CCD_。