JDK 9 RFR of JDK-8134795: Port fdlibm pow to Java
Jeff Hain
jeffhain at rocketmail.com
Thu Sep 17 22:12:57 UTC 2015
Hi.
>At long last, I've started the port of the C version of FDLIBM (freely
>distributable math library) from C to Java, beginning with the pow method:
I ran it through tests of my math lib (jafama),
and found the following issue:
// ok
StrictMath.pow(1.0000000000000004, 2.1E9) = 1.0000009325877754
FdLibm.Pow.compute(1.0000000000000004, 2.1E9) = 1.0000009325877754
// overflows early
StrictMath.pow(1.0000000000000004, 2.2E9) = 1.0000009769967388
FdLibm.Pow.compute(1.0000000000000004, 2.2E9) = Infinity
// actual overflow is much further
StrictMath.pow(1.0000000000000004, 1.59828858065033216E18) = 1.7976931348621944E308
StrictMath.pow(1.0000000000000004, 1.59828858065033242E18) = Infinity
Comparing the behavior of your code with that of Eric Blake's StrictMath
(the version I got has other issues, but not that one),
it could be corrected by replacing
if (x_abs > 1.0) {
with
if (x_abs >= 1.0000009536743164) {
After that modification, tests didn't show any difference with StrictMath.
-Jeff
More information about the core-libs-dev
mailing list