Math.exp() yields different results on 32 bit systems
Joe Darcy
joe.darcy at oracle.com
Tue Sep 22 21:56:31 UTC 2020
Hello,
Per the spec
https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Math.html#exp(double)
the result of exp has to be within one ulp of the exact result and the
value of e^(10_000) is (much) larger than Double.MAX_VALUE so positive
infinity is the correct answer. Therefore, it looks like the intrinsic
on 32-bit systems is buggy.
HTH,
-Joe
On 9/22/2020 3:30 AM, Andreas Ahlenstorf wrote:
> Hi!
>
> According to a bug report at AdoptOpenJDK [1] Math.exp(10_000.0) yields different results on 32 bit systems than on 64 bit systems.
>
> public class Test {
> public static void main(String[] args) {
> System.out.println(Math.exp(10_000.0));
> }
> }
>
> On 64 bit systems the code above prints Infinity. On 32 bit systems the result is 0.0. I think that's wrong, but I'm far from an expert in floating point arithmetics.
>
> Affected versions:
>
> * OpenJDK 9.0.1
> * OpenJDK 11.0.8
> * OpenJDK 15
>
> Not affected:
>
> * OpenJDK 8u265
>
> We tested both with AdoptOpenJDK and Azul Zulu on Windows and Linux on x86 and x64. If we disable intrinsics (-XX:+UnlockDiagnosticVMOptions -XX:-UseLibmIntrinsic), Infinity is printed on x86 systems, too.
>
> Is this expected behavior?
>
> Best,
> Andreas
>
> [1] https://github.com/AdoptOpenJDK/openjdk-support/issues/182
More information about the core-libs-dev
mailing list