On Thu, 11 Nov 2021 13:59:51 GMT, Jim Laskey <[email protected]> wrote:
> The modified ziggurat algorithm is not correctly implemented in
> `java.base/jdk/internal/util/random/RandomSupport.java`.
>
> Create a histogram of a million samples using 2000 uniform bins with the
> following range:
> Exponential range from 0 to 12. Gaussian range from -8 to 8.
>
> This does not pass a Chi-square test. If you look at the histogram it is
> obviously not showing the shape of the PDF for these distributions. Look
> closely at the range around zero (e.g. +/- 0.5).
Looks fine.
src/java.base/share/classes/jdk/internal/util/random/RandomSupport.java line
1191:
> 1189: // At this point, the high-order bits of U1 have not
> been used yet,
> 1190: // but we need the value in U1 to be positive.
> 1191: for (U1 = (U1 >>> 1);; U1 = (rng.nextLong() >>> 1)) {
A minor thing, but I would probably write `U1 >>>= 1` instead of `U1 = (U1 >>>
1)`.
-------------
Marked as reviewed by bpb (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/6353