public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: optimization/6258: floor() may return incorrect value when optimized
@ 2002-04-11 14:35 rth
  0 siblings, 0 replies; 2+ messages in thread
From: rth @ 2002-04-11 14:35 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, karl, nobody

Synopsis: floor() may return incorrect value when optimized

State-Changed-From-To: open->closed
State-Changed-By: rth
State-Changed-When: Thu Apr 11 14:35:14 2002
State-Changed-Why:
    Not a bug.  -ffast-math allows the compiler to replace
    a/90 with a*(1/90).  Except that 1/90 can't be represented
    exactly, so the result of the multiplication is 
    -3.0000000000000001144917494144692682, not -3.  Since the
    value is indeed less than -3, floor rightly returns -4.
    
    If you don't want this to happen, don't use -ffast-math.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6258


^ permalink raw reply	[flat|nested] 2+ messages in thread

* optimization/6258: floor() may return incorrect value when optimized
@ 2002-04-11  9:26 Karl Burgess
  0 siblings, 0 replies; 2+ messages in thread
From: Karl Burgess @ 2002-04-11  9:26 UTC (permalink / raw)
  To: gcc-gnats, debian-gcc


>Number:         6258
>Category:       optimization
>Synopsis:       floor() may return incorrect value when optimized
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Thu Apr 11 09:26:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Karl Burgess
>Release:        3.0.4 (Debian testing/unstable)
>Organization:
Tarantella, Inc.
>Environment:
System: Linux barrie.tarantella.com 2.4.12 #8 Thu Feb 21 11:48:06 UTC 2002
i686 unknown
Architecture: i686

host: i386-pc-linux-gnu
build: i386-pc-linux-gnu
target: i386-pc-linux-gnu
configured with:
../src/configure -v --enable-languages=c,c++,java,f77,proto,objc --prefix=/u
sr --infodir=/share/info --mandir=/share/man --enable-shared --with-gnu-as -
-with-gnu-ld --with-system-zlib --enable-long-long --enable-nls --without-in
cluded-gettext --disable-checking --enable-threads=posix --enable-java-gc=bo
ehm --with-cpp-install-dir=bin --enable-objc-gc i386-linux
>Description:

Under some circumstances the GCC optimizations triggered by -ffast-math and
-O cause the maths function floor() to return incorrect values.
The supplied test program calls the function floor() in two places with
the same input values, but gets different values returned.


The gcc output is as follows:

egcc -v -save-temps -Wall -MMD -O -ffast-math -ofloor_opt floor.c -lm
Reading specs from /usr/lib/gcc-lib/i386-linux/3.0.4/specs
Configured with:
../src/configure -v --enable-languages=c,c++,java,f77,proto,objc --prefix=/u
sr --infodir=/share/info --mandir=/share/man --enable-shared --with-gnu-as -
-with-gnu-ld --with-system-zlib --enable-long-long --enable-nls --without-in
cluded-gettext --disable-checking --enable-threads=posix --enable-java-gc=bo
ehm --with-cpp-install-dir=bin --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.0.4
 /usr/lib/gcc-lib/i386-linux/3.0.4/cpp0 -lang-c -v -MM -MF
floor.dfloor_opt -MQ
floor_opt -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=4 -D__ELF__ 
-Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=
posix -D__OPTIMIZE__ -D__FAST_MATH__ -D__STDC_HOSTED__=1 -Wall -Acpu=i386 -A
machine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ floor.c floor.i
GNU CPP version 3.0.4 (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/i386-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc-lib/i386-linux/3.0.4/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i386-linux/3.0.4/cc1 -fpreprocessed
floor.i -quiet -dumpbase floor.c -O -Wall -version -ffast-math -o floor.s
GNU CPP version 3.0.4 (cpplib) (i386 Linux/ELF)
GNU C version 3.0.4 (i386-linux)
 compiled by GNU C version 3.0.4.
 as -V -Qy -o floor.o floor.s
GNU assembler version 2.12.90.0.1 (i386-linux) using BFD version 2.12.90.0.1
20020307 Debian/GNU Linux
 /usr/lib/gcc-lib/i386-linux/3.0.4/collect2 -m elf_i386 -dynamic-linker
/lib/ld-linux.so.2 -ofloor_opt
/usr/lib/gcc-lib/i386-linux/3.0.4/../../../crt1.o
/usr/lib/gcc-lib/i386-linux/3.0.4/../../../crti.o
/usr/lib/gcc-lib/i386-linux/3.0.4/crtbegin.o -L/usr/lib/gcc-lib/i386-linux/3
.0.4 -L/usr/lib/gcc-lib/i386-linux/3.0.4/../../..
floor.o -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-linux/3.0.4/crtend.o
/usr/lib/gcc-lib/i386-linux/3.0.4/../../../crtn.o


When the test program is run (by typing ./floor_opt), it prints out the
following:

    Test failed! floor(-270.000000/90) == -4.000000
    Test worked! floor(-270.000000/90) == -3.000000

The first calculation involving floor() has returned -4.0 instead of
-3.0, which is incorrect. The second occurrence of floor() is correct.


>How-To-Repeat:

Here is the .i file for the test, compressed with gzip -9 and uuencode:

begin 664 floor.i.gz
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
A0#\\1W#</>VU)8DO'"+`_E=FVSJ.@G[^']=/L<$![```
`
end

>Fix:

I have a choice of workarounds:
If you don't compile with -ffast-math, then the test program works.
If you compile with -ffast-math, but not -O, then the program also works.
If you compile with -O -ffast-math -fno-inline, then the program also works.
If you compile with gcc 2.7.2.1, then the program works.
If you redefine floor() as a call to one of your own functions (eg.
myfloor),
which then calls the real floor(), then the program also works.

I have also noticed that the problem does not occur with gcc 3.0.3 on
Solaris 2.6


>Release-Note:
>Audit-Trail:
>Unformatted:
 To: gcc-gnats@gcc.gnu.org,debian-gcc@lists.debian.org
 Subject: floor() may return incorrect value when optimized
 From: karl
 Reply-To: karl@tarantella.com
 Cc:
 X-send-pr-version: 3.113
 X-GNATS-Notify:
 
 


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-04-11 21:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-11 14:35 optimization/6258: floor() may return incorrect value when optimized rth
  -- strict thread matches above, loose matches on Subject: below --
2002-04-11  9:26 Karl Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).