c/8395: gcc 2.95.4 and 3.2 generate wrong code for double on intel
Bruce Allen
ballen@gravity.phys.uwm.edu
Sat Nov 2 22:19:00 GMT 2002
Marco, Toon is completely correct.
If you read the materials that we keep asking you to study, you will learn
that there is a discrete set of "IEEE754 floating point numbers".
Somewhat less than 2^32 of them for single precision, somewhat less than
2^64 of them for double precision.
As a consequence, since this is a finite set, and the real numbers are not
even a countable set, most real numbers are not IEEE754 floats. Only a
finite subset are. Examples:
Pi ==> not an IEEE754 float
1.2 ==> not an IEEE754 float
6 ==> IS an IEEE754 float
1.25 ==> IS an IEEE754 float
1+2^-20 ==> IS an IEEE754 float
Also, a mathematical operation between two IEEE754 floats may or may not
yield another IEEE754 float. For example 1.25*1.25 does yield another
IEEE754 float, but (1+2^-20)*(1+2^-20) does yield an IEEE754 float if
working in double precision, but not in single precision.
When the result of a mathematical operation (say, assigning 1.2 to an
IEEE754 variable) does not yield an IEEE754 float, the standard specifies
a couple of different possible user-selectable ways to round the number
(assign it an IEEE754 value). There is round-to-nearest (pick closest
IEEE754 float) and round-to-zero.
Also, languages like C do not specify an order for operations to take
place in expressions. So two identical lines of C might yield different
results with different compilers.
Like you, I am a University Professor (Physics). I teach IEEE754 in my
course on mathematical methods where we spend a few weeks on numerical
methods. Here are a few exercises for you to do:
-- what is the largest integer that is an IEEE754 single float? double
float? Write this as a sum of powers of 2.
-- what is the largest integer N such that both N and N+1 are IEEE754
single floats?
-- what is the smallest positive number that is still a normalized IEEE754
single float. smallest positive number that is an IEEE754 single float
but is not normalized?
Please read some of the literature (it is not a complicated subject) and
do the exercises.
Bruce Allen
On Sat, 2 Nov 2002, Toon Moene wrote:
> Marco Bernardo wrote:
>
> > 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?
>
> Yes. For further explanations, see the "Further Readings" item on our
> home page:
>
> http://gcc.gnu.org -> "Further Readings" (left column) ->
>
> Differences among IEEE 754 implementations (by Doug Priest)
>
> --
> Toon Moene - mailto:toon@moene.indiv.nluug.nl - phoneto: +31 346 214290
> Saturnushof 14, 3738 XG Maartensdijk, The Netherlands
> Maintainer, GNU Fortran 77: http://gcc.gnu.org/onlinedocs/g77_news.html
> Join GNU Fortran 95: http://g95.sourceforge.net/ (under construction)
>
>
More information about the Gcc-bugs
mailing list