This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Floating point optimizations
- From: Christian Keil <c dot keil at tu-harburg dot de>
- To: gcc-help at gcc dot gnu dot org
- Date: Thu, 03 Apr 2008 18:48:53 +0200
- Subject: Floating point optimizations
Hi,
we are currently investigating some numerical algorithms and the claim
appeared that a C statement like
x = c - (c - a);
would be easily transformed into
x = a;
by the compiler. Now investigating this with a vanilla GCC 4.1.2 failed
to support the claim. Compiling the below program with -O3 -ffast-math
keeps the computation of x. The output shows x is different from a. The
question is, is there some compiler switch or the like to get GCC to
make the above transformation? I searched the docs but had the
impression that all relevant flags should be included in the above two
(especially ffast-math).
Please let me know if you need any additional information or if this is
the wrong list for this kind of question.
Cheers,
Christian
------8<--------
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
double a, x;
double c;
scanf("%lf", &a);
c = ((1 << 27) + 1) * a;
x = c - (c - a);
printf("a = %e(%a)\n", a, a);
printf("x = %e(%a)\n", x, x);
}
------8<--------
--
Christian Keil /"\
Institute for Reliable Computing \ / ASCII Ribbon Campaign
Hamburg University of Technology X against HTML email & vCards
mail:c.keil@tu-harburg.de / \