float f = (float)\'a\';
if(f < 0){
}
else if(f == 0){
}
else if(f > 0){
}
else{
printf(\"NaN\\n\");
This works for constants too (0/0 will give a compiler error on vs):
const unsigned maxU = ~0;
const float qNan = *((float*)&maxU);
To produce a nan, there are a few ways:
1) generate it manually (read ieee754
to set up the bits properly)
2) use a macro. GCC exposes a macro NAN
. It's defined in math.h
The general way to check for a nan is to check if (f == f)
(which should fail for nan values)
For nan, the exponent bits in the float representation should all be set to 1 (float consists of a signed bit, a set of exponent bits and a set of mantissa bits)
nan is produced when we program contain value like 0.0/0.0 as said by @Dan Cecile OR sqrt(-1).