This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
Re: c/8395: gcc 2.95.4 and 3.2 generate wrong code for double onintel
- From: Marco Bernardo <bernardo at sti dot uniurb dot it>
- To: nobody at gcc dot gnu dot org
- Cc: gcc-prs at gcc dot gnu dot org,
- Date: 2 Nov 2002 15:46:02 -0000
- Subject: Re: c/8395: gcc 2.95.4 and 3.2 generate wrong code for double onintel
- Reply-to: Marco Bernardo <bernardo at sti dot uniurb dot it>
The following reply was made to PR c/8395; it has been noted by GNATS.
From: Marco Bernardo <bernardo@sti.uniurb.it>
To: Bruce Allen <ballen@gravity.phys.uwm.edu>
Cc: Bruce Allen <ballen@aei.mpg.de>, <gcc-gnats@gcc.gnu.org>,
<gcc-prs@gcc.gnu.org>, <gcc-bugs@gcc.gnu.org>, <nobody@gcc.gnu.org>
Subject: Re: c/8395: gcc 2.95.4 and 3.2 generate wrong code for double on
intel
Date: Sat, 2 Nov 2002 16:42:46 +0100 (CET)
On Thu, 31 Oct 2002, Bruce Allen wrote:
>It's not an argument, it's simply the facts. Please read the materials
>that I refered you to.
Ok, let us suppose that for the following program prova.c
#include <stdio.h>
int main(void)
{
double x, y, z, y_times_z;
x = -6.0;
y = -1.2;
z = 5;
y_times_z = y * z;
printf("%g %g %g %g %g %g\n",
x,
y,
z,
x - y * z,
y_times_z,
x - y_times_z);
return(0);
}
compiled with
gcc -ansi -Wall prova.c -o prova
on an intel machine, the following output
-6 -1.2 5 -2.22045e-16 -6 0
^^^^^^^^^^^^
is not a bug, but simply a consequence of the adoption of
the IEEE 754 standard for floating point numbers.
Now, I see two problems:
1. Some colleagues of mine tried to compile and run the same program
on other platforms, in particular on a sparc machine, and the output
turned out to be
-6 -1.2 5 0 -6 0
Why is that? Isn't the IEEE 754 standard adopted on sparc machines?
2. I hope we all agree on the fact that the output produced by
a (sequential) C program is the same for a given input,
regardless of the compilation options that are used.
(If not, the compiler would not be compliant with the semantics).
Now, try to compile the program above with
gcc -ansi -Wall -O prova.c -o prova
on an intel machine, i.e. try to set the code optimization option.
In such a case the output turns out to be
-6 -1.2 5 0 -6 0
i.e. the right value 0 is obtained instead of the wrong -2.22045e-16.
This is a clear evidence that gcc contains a serious bug that should be
fixed asap (in the right way, i.e. according to the output obtained by
setting option -O).
Let me conclude by saying that my intention is not to be polemic.
My point of view is that of a university professor who wants to teach
to his students that there is a great alternative to Microsoft,
which is Linux and the free software world.
You would then understand that it is very difficult for me to support gcc
and to teach my students how to use gcc in the presence of such a strange
behavior, which is not justifiable at all on a scientific basis.
Best regards,
Marco
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Prof. Marco Bernardo
Universita` di Urbino
Centro per l'Applicazione delle Scienze e Tecnologie dell'Informazione
Piazza della Repubblica 13, 61029 Urbino, Italy
Phone: +39-0722-4475 - E-mail: bernardo@sti.uniurb.it
Fax: +39-0722-4475 - WWW: http://www.sti.uniurb.it/bernardo/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@