[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Why do some math functions return -0
- From: Mike Pall <mikelu-1009@...>
- Date: Tue, 21 Sep 2010 03:35:46 +0200
Tony Finch wrote:
> It looks like gcc on the powerpc isn't implementing IEEE 754 rounding
> modes correctly or consistently with -O2. If I recompile Lua without
> optimisation then the negative zeroes go away.
Nope, your program doesn't use the FENV_ACCESS pragma, so the
C compiler is free to fold the FP constants using the default
rounding mode. Since -O2 enables constant folding, you may get
different output if the rounding mode differs at runtime.
Note that FENV_ACCESS is implemented only in GCC 4.5 or higher.
But you can turn it on globally in earlier versions with
-frounding-math (the default is off).
Also note that your finding is unrelated to the problem at hand
(no constant folding, no change of rounding mode). There's some
prior evidence of buggy or miscompiled floor/ceil for OSX/PPC:
http://www.mail-archive.com/fink-devel@lists.sourceforge.net/msg11728.html
http://hg.mozilla.org/tracemonkey/file/1bc3d15c226f/js/src/jsmath.cpp#l233
So the toolchain of the original poster is probably too old and
broken in this regard. Occam's Razor strikes again.
--Mike