RFR: 8284493: Improve computeNextExponential tail performance and accuracy

Xin Liu xliu at openjdk.org
Tue Jun 6 16:34:06 UTC 2023


On Wed, 6 Apr 2022 17:47:53 GMT, Chris Hennick <duke at openjdk.org> wrote:

> This PR improves both the worst-case 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 prevent `nextGaussian` from going into the `nextExponential` tail twice.

@Pr0methean is an employee of Amazon.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/8131#issuecomment-1090965245


More information about the core-libs-dev mailing list