1

鉴于以下问题除以零预防检查它是否为 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返回是真的?还有为什么会int nZero = 3 / (float)nQuota;输出:-2147483648

4

3 回答 3

2

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

于 2012-07-11T22:33:14.733 回答
1

不是,不是,NaN 表示“不是数字”,它的意思是,不能用数字表示的东西(像0 / 0数学上说的不确定性,没有数字表示),无穷大,就是这样,无穷大, 正或负

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

inline bool IsInf(float fval)  {
    return (fval == fval) && ((fval - fval) != 0.0f);
}
于 2012-07-11T22:45:30.577 回答
0

int nZero = 3 / (float)nQuota;输出-2147483648,因为 to 的转换0float<= 的值,该值1e-009在整个float f = 0.000000001;或更少范围内给出。

于 2012-07-11T22:51:37.440 回答