std::arg() bug : not repetitive ?

Eric Backus eric_backus@agilent.com
Wed Sep 2 16:12:00 GMT 2009


Dave Korn <dave.korn.cygwin <at> googlemail.com> writes:

> 
> Marco Atzeri wrote:
> 
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323#c2
> > 
> > $g++-4 -ffloat-store  comp_2.cc -O3 -o comp_4
> > 
> > ./comp_4
> > 0.785398
> > 0.785398
> > 0
> > 0
> 
>   Ah, good, thanks for the diagnosis.  IIUC this is basically fixed in GCC
> HEAD now and 4.5.0 shouldn't suffer the same problem.
> 
>     cheers,
>       DaveK
> 
> 

I guess I'm in the minority here, but I'll go out on a limb and say that the 
original behavior does NOT seem like a defect to me.  My reasoning:

1. Compilers are free to use and/or not use excess precision within 
expressions.  I believe the standard requires the excess precision to get 
thrown away when a value is stored into a variable, but that's not happenning 
here.  I think -ffloat-store tells gcc to strictly follow the standard, but 
(again, if my understanding is correct) since the values of arg(z1) and arg
(z2) are not stored into variables, it won't necessarily help.

Note that there is a performance penalty to strictly following the standard, 
as compared with freely using excess precision when convenient, so in many 
(most?) cases it is desirable to let the compiler go ahead and do that.  Also 
in many (most?) cases, excess precision only helps, so the default may be to 
let the compiler do what it wants for speed.

2. In general, you should not be comparing equality of floating-point values.  
This is true even if you get rid of the excess precision stuff above.  Sure, 
in this particular case, if you get rid of excess precision, the values will 
be exactly equal, but direct comparison is a bad habit to get into.

-- 
Eric Backus


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list