Checking if a number is NaN fails
===

Given the following questions [Divide by Zero Prevention](http://stackoverflow.com/questions/11299992/divide-by-zero-prevention) and [Check if it's a NaN](http://stackoverflow.com/questions/3437085/check-nan-number) 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`?