检查数字是否为NaN失败

时间:2012-07-11 22:31:54

标签: c++

考虑到以下问题Divide by Zero PreventionCheck if it's a 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 :(得分:2)

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

答案 1 :(得分:1)

不是,不是,NaN声明“非数字”,这意味着,某些不能表示为数字的数字(从数学上讲,0 / 0这样的不确定性,没有数字表示) ,无穷大,只是那个,无穷大,积极或消极

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

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

答案 2 :(得分:0)

int nZero = 3 / (float)nQuota;输出-2147483648,因为0float的转换价值为&lt; = 1e-009,在整个float f = 0.000000001;或以下。