Reputation: 15718
Given the following questions Divide by Zero Prevention and Check if it's a NaN as the examples I've written the folowing code:
#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;
}
Why is IsNonNan
returning true? also why would int nZero = 3 / (float)nQuota;
output: -2147483648
?
Upvotes: 1
Views: 252
Reputation: 233
int nZero = 3 / (float)nQuota;
outputs -2147483648
because the conversion of 0
to float
is value of <= 1e-009
which is given throughout float f = 0.000000001;
or less.
Upvotes: 0
Reputation: 16039
Not, is not, NaN states for "Not a Number", it means, something that can't be expressed as a number (indeterminations like 0 / 0
which mathematically speaking, don't have a numeric representation), infinity, is just that, infinities, positive or negative
To check if a float is infinity, you can use:
inline bool IsInf(float fval) {
return (fval == fval) && ((fval - fval) != 0.0f);
}
Upvotes: 1