给出以下问题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

最佳答案

不是,不是,NaN表示“不是数字”,这意味着不能用数字表示(无定理,例如0 / 0这样的确定,在数学上没有数字表示),无穷大就是这样,无穷,正面或负面

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

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

关于c++ - 检查数字是否为NaN失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11442508/

10-10 14:19