How to produce a NaN float in c?

前端 未结 9 918
春和景丽
春和景丽 2020-12-05 14:01
float f = (float)\'a\';
if(f < 0){ 
}   
else if(f == 0){ 
}   
else if(f > 0){ 
}   
else{
    printf(\"NaN\\n\");                                                     


        
相关标签:
9条回答
  • 2020-12-05 14:52

    This works for constants too (0/0 will give a compiler error on vs):

    const unsigned maxU = ~0;
    const float qNan =  *((float*)&maxU);
    
    0 讨论(0)
  • 2020-12-05 14:54

    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)

    0 讨论(0)
  • 2020-12-05 14:58

    nan is produced when we program contain value like 0.0/0.0 as said by @Dan Cecile OR sqrt(-1).

    0 讨论(0)
提交回复
热议问题