1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.rng.examples.sampling;
19
20 import org.apache.commons.rng.UniformRandomProvider;
21 import org.apache.commons.rng.simple.RandomSource;
22 import org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler;
23 import org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
24 import org.apache.commons.rng.sampling.distribution.BoxMullerNormalizedGaussianSampler;
25 import org.apache.commons.rng.sampling.distribution.ContinuousSampler;
26
27
28
29
30
31
32
33
34 public class UniformSamplingVisualCheck {
35
36 private final UniformRandomProvider rng = RandomSource.create(RandomSource.XOR_SHIFT_1024_S);
37
38 private final ContinuousSampler[] samplers = new ContinuousSampler[] {
39 new ZigguratNormalizedGaussianSampler(rng),
40 new MarsagliaNormalizedGaussianSampler(rng),
41 new BoxMullerNormalizedGaussianSampler(rng),
42 };
43
44
45
46
47
48
49 public static void main(String[] args) {
50 final float lo = 0.1f;
51 final int bands = 2;
52 float hi = lo;
53 for (int i = 0; i < bands; i++) {
54 hi = Math.nextUp(hi);
55 }
56 System.out.printf("# lo=%.10e hi=%.10e", lo, hi);
57 System.out.println();
58
59 final UniformSamplingVisualCheck app = new UniformSamplingVisualCheck();
60
61 while (true) {
62 System.out.printf("%.16e\t", app.rng.nextDouble());
63
64 for (ContinuousSampler s : app.samplers) {
65 while (true) {
66 final double r = s.sample();
67 if (r < lo ||
68 r > hi) {
69
70 continue;
71 }
72
73 System.out.printf("%.16e ", r);
74 break;
75 }
76 }
77
78 System.out.println();
79 }
80 }
81 }