From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21449 invoked by alias); 2 Nov 2002 15:46:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 21408 invoked by uid 71); 2 Nov 2002 15:46:02 -0000 Date: Sat, 02 Nov 2002 07:46:00 -0000 Message-ID: <20021102154602.21406.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Marco Bernardo Subject: Re: c/8395: gcc 2.95.4 and 3.2 generate wrong code for double on intel Reply-To: Marco Bernardo X-SW-Source: 2002-11/txt/msg00095.txt.bz2 List-Id: The following reply was made to PR c/8395; it has been noted by GNATS. From: Marco Bernardo To: Bruce Allen Cc: Bruce Allen , , , , 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 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/ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@