> 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:

  Weaken contract of computeWinsorizedNextExponential to save max/min calls

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/8131/files
  - new: https://git.openjdk.org/jdk/pull/8131/files/cab6b5bb..5919faeb

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=8131&range=11
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=8131&range=10-11

  Stats: 17 lines in 1 file changed: 0 ins; 5 del; 12 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

Reply via email to