> 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 fixes 
> that by tracking the multiple of exponentialX0 as a long. (This changes the 
> maximum possible output to `1.0p63 * DoubleZigguratTables.exponentialX0 == 
> 0x1.e46eff20739afp65`; previously it would have been `0x1.0p56` because once 
> `extra` reaches that amount, `x + extra == extra` due to the rounding error. 
> This lowers the probability of reaching the maximum with an ideal PRNG from 
> about `1.3877787807814488E-17` to about `1.4323726067488646E-20` (calculated 
> using the identity `ln(x) == Math.log10(x)/Math.log10(Math.exp(1))`).

Chris Hennick has refreshed the contents of this pull request, and previous 
commits have been removed. The incremental views will show differences compared 
to the previous content of the PR. The pull request contains one new commit 
since the last revision:

  Fix rounding error in computeNextExponential; use FMA
  
  Repeatedly adding DoubleZigguratTables.exponentialX0 to extra causes a 
rounding error to accumulate at the tail of the distribution; this fixes that 
by tracking the multiple of exponentialX0 as a long.
  
  Add computeWinsorizedNextExponential for testability

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/8131/files
  - new: https://git.openjdk.java.net/jdk/pull/8131/files/1fd959cc..fa340fb4

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=8131&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=8131&range=00-01

  Stats: 5 lines in 1 file changed: 2 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8131.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8131/head:pull/8131

PR: https://git.openjdk.java.net/jdk/pull/8131

Reply via email to