Allin Cottrell wrote:

>
> 
> Isn't that undefined behavior, trying to access the wrong member of a
> union?  


Yes.  I am using that to force a bad floating point value.

> Here (gtk 2.0.6) it prints "0.00", but I don't see that it's
> obliged to.
> 


I feel it should not crash on any input.

I have a similar test case, which uses:

tmp_float = (float)strtod("6.0e-44",NULL);
g_string_sprintf(pGStr,"%6.2f\n",tmp_float);

and produces the same crash.  In that case, a "%g\n" format string 
returns something within precision distance of 6.0e-44.  The compiler 
(gcc 2.95) accepts that a float can be denormalized, and operates on it 
in various ways, but the g_string_sprintf() function does not.

The above is completely legal way to produce the crash, and an 
application could well convert a (very small) double to a float and then 
later try to print the float in a limited precision output format.  That 
argues that the correct behavior is indeed "0.00", and nothing else.

I guess the alternative would be to print "nan", but I'd vote for "0.00" 
instead.

Eric

_______________________________________________
gtk-list mailing list
[EMAIL PROTECTED]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to