From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1997 invoked by alias); 22 Jun 2004 09:58:28 -0000 Mailing-List: contact java-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-prs-owner@gcc.gnu.org Received: (qmail 1977 invoked by uid 48); 22 Jun 2004 09:58:27 -0000 Date: Tue, 22 Jun 2004 10:15:00 -0000 From: "jari dot korva at iki dot fi" To: java-prs@gcc.gnu.org Message-ID: <20040622095819.16132.jari.korva@iki.fi> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug java/16132] New: Invalid double calculations on ARM X-Bugzilla-Reason: CC X-SW-Source: 2004-q2/txt/msg00232.txt.bz2 List-Id: Some StrictMath functions, including exp() and log(), return incorrect values on StrongARM processor. Some others, including sin() and tan(), work just fine. In addition, System.out.println() fails to print floating point numbers correctly: # ./floattest Math.log(10)=2.302585 StrictMath.log(10)=-745.826366 Math.exp(10)=22,026.465795 StrictMath.exp(10)=1.344389 0.1+0.1=0.000003058474:0258 0.1+0.1=0.200000 # cat floattest.java import java.text.*; public class floattest { public static void print(String s, double d) { NumberFormat nf = NumberFormat.getInstance(); nf.setMinimumFractionDigits(6); System.out.println(s + nf.format(d)); } public static void main(String args[]) { print("Math.log(10)=", Math.log(10.0)); print("StrictMath.log(10)=", StrictMath.log(10.0)); print("Math.exp(10)=", Math.exp(10.0)); print("StrictMath.exp(10)=", StrictMath.exp(10.0)); double x = 0.1 + 0.1; System.out.println("0.1+0.1=" + x); print("0.1+0.1=", x); } } Is this possibly due to a bug in Double.doubleToLongBits() (see http://lists.arm.linux.org.uk/pipermail/linux-arm/2004-June/007983.html)? The test application has been compiled with: arm-unknown-linux-gnu-gcj -c floattest.java arm-unknown-linux-gnu-gcj --main=floattest -o floattest floattest.o ... using: Reading specs from /tmp/cross/lib/gcc/arm-unknown-linux-gnu/3.4.0/specs Reading specs from /tmp/cross/lib/gcc/arm-unknown-linux-gnu/3.4.0/../../../../arm-unknown-linux-gnu/lib/libgcj.spec rename spec lib to liborig Configured with: /wrk2/jko/nobackup/arm-linux/crosstool-0.27/build/arm-unknown-linux-gnu/gcc-3.4.0-glibc-2.3.2/gcc-3.4.0/configure --target=arm-unknown-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/tmp/cross --with-headers=/tmp/cross/arm-unknown-linux-gnu/include --with-local-prefix=/tmp/cross/arm-unknown-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++,java --enable-shared --enable-c99 --enable-long-long Thread model: posix gcc version 3.4.0 ... and executed on a: # uname -a Linux familiar 2.4.19-rmk6-pxa1-hh30 #3 Wed Nov 12 11:07:41 EST 2003 armv4l unknown -- Summary: Invalid double calculations on ARM Product: gcc Version: 3.4.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: java AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jari dot korva at iki dot fi CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu dot org GCC host triplet: i386-linux-gnu GCC target triplet: arm-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16132