考虑到以下问题Divide by Zero Prevention和Check 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
?
答案 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
,因为0
到float
的转换价值为&lt; = 1e-009
,在整个float f = 0.000000001;
或以下。