RFR: 8284493: Fix rounding error in computeNextExponential [v11]
Chris Hennick
duke at openjdk.org
Sun Jun 19 01:16:39 UTC 2022
> This PR improves both the performance of `nextExponential` and `nextGaussian` and the distribution of output at the tails. It fixes the following imperfections:
>
> * Repeatedly adding DoubleZigguratTables.exponentialX0 to extra causes a rounding error to accumulate at the tail of the distribution (probably starting around `2*exponentialX0 == 0x1.e46eff20739afp3 ~ 15.1`); this PR fixes that by tracking the multiple of exponentialX0 as a long. (This distortion is worst when `x > 0x1.0p56` since in that case, a rounding error means `extra + x == extra`.
> * Reduces several equations using `Math.fma`. (This will almost certainly improve performance, and may or may not improve output distribution.)
> * Uses the newly-extracted `computeWinsorizedNextExponential` function to greatly reduce the probability that `nextGaussian` suffers from *two* tail cases of `nextExponential`.
Chris Hennick has updated the pull request incrementally with one additional commit since the last revision:
Revert "Bugfix: need a thread-local instance for throughput test"
This reverts commit d903efe57225e916a5450ac31437123050e3377c.
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/8131/files
- new: https://git.openjdk.org/jdk/pull/8131/files/db9ff01d..cab6b5bb
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=8131&range=10
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=8131&range=09-10
Stats: 8 lines in 1 file changed: 0 ins; 4 del; 4 mod
Patch: https://git.openjdk.org/jdk/pull/8131.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/8131/head:pull/8131
PR: https://git.openjdk.org/jdk/pull/8131
More information about the core-libs-dev
mailing list