In the following code the repeated multiplication is folded into a single operation 
(multiplication by Infinity). 
For different values of "x" this leads to undeserved or absent floating point 
exceptions, and 
breaks some of the elementary math functions in Libm. Occurs at optimization O1 and 
higher. 

static const double C = 0x1.0p1023;

double foo(double x)
{
        return ( ( (x * C) * C ) * C );
}

-- 
           Summary: gcc-4.0 should not reassociate floating point add or
                    multiplication
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P1
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: fjahanian at apple dot com
                CC: gcc-bugs at gcc dot gnu dot org,roger at eyesopen dot
                    com
 GCC build triplet: powerpc-apple-darwin
  GCC host triplet: powerpc-apple-darwin
GCC target triplet: powerpc-apple-darwin


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17892

Reply via email to