$ gcc -O2 div.c $ ./a.out 1.000000000000000 0.5000000000000000 0.5000000000000000 0.3333333333333333 $ gcc -O2 -funroll-loops div.c $ ./a.out 1.000000000000000 0.4999980926513672 0.4999980926513672 0.3333330154418945
With -funroll-loops the insn that computes e = 1 - (b * y) is optimized in cse2 to e = 0. -- Summary: [4.3/4.4 regression] -funroll-loops breaks inline float divide Product: gcc Version: 4.3.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: schwab at suse dot de GCC target triplet: ia64-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35695