[Sablevm-developer] Bug#255524: sablevm: Incorrect result due to computations in extended precision
                
                Brought to you by:
                
                    egagnon
                    
                
            
            
        
        
        
    | 
      
      
      From: Vincent L. <vi...@vi...> - 2004-06-21 16:23:19
      
     | 
| Package: sablevm
Version: 1.1.5-1
Severity: normal
Concerning the following Java source:
------------------------------------------------------------------
// $Id: test.java 3734 2004-06-21 15:36:52Z lefevre $
public class test {
    public static void main(String[] args) throws Exception {
        test t = new test();
        t.doTest();
    }
    volatile double x, y, z, d;
    public void doTest() {
        x = 9007199254740994.0; /* 2^53 + 2 */
        y = 1.0 - 1/65536.0;
        z = x + y;
        d = z - x;
        System.out.println("z = " + z);
        System.out.println("d = " + d);
    }
}
------------------------------------------------------------------
I've compiled it with "gcj -C test.java" (GCC 3.3.4).
Both IBM's and Sun's JVM give the correct result:
greux:~/wd/src/fp> /global/greux/lefevre/IBMJava2-131/jre/bin/java test
z = 9.007199254740994E15
d = 0.0
greux:~/wd/src/fp> /usr/local/j2re1.4.1/bin/java test
z = 9.007199254740994E15
d = 0.0
but not SableVM:
greux:~/wd/src/fp> /usr/bin/java-sablevm test
z = 9.007199254740996E15
d = 2.0
SableVM should switch the FPU of the x86 processor (Pentium III in
my case) to rounding in double precision to avoid the effect of the
"double rounding" (you may find some information about this effect
here: <http://www.srware.com/linux_numerics.txt>).
-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.6
Locale: LANG=POSIX, LC_CTYPE=en_US.ISO8859-1
Versions of packages sablevm depends on:
ii  java-common                 0.22         Base of all Java packages
ii  libc6                       2.3.2.ds1-13 GNU C Library: Shared libraries an
ii  libpopt0                    1.7-4        lib for parsing cmdline parameters
ii  libsablevm1                 1.1.5-1      Free implementation of JVM second 
ii  unzip                       5.51-2       De-archiver for .zip files
-- no debconf information
 |