Class ZigguratNormalizedGaussianSampler
- java.lang.Object
-
- org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler
-
- All Implemented Interfaces:
ContinuousSampler
,NormalizedGaussianSampler
,SharedStateContinuousSampler
,SharedStateSampler<SharedStateContinuousSampler>
public class ZigguratNormalizedGaussianSampler extends java.lang.Object implements NormalizedGaussianSampler, SharedStateContinuousSampler
Marsaglia and Tsang "Ziggurat" method for sampling from a Gaussian distribution with mean 0 and standard deviation 1.The algorithm is explained in this paper and this implementation has been adapted from the C code provided therein.
Sampling uses:
- Since:
- 1.1
-
-
Field Summary
Fields Modifier and Type Field Description private static double[]
F
Auxiliary table.private static long[]
K
Auxiliary table.private static int
LAST
Index of last entry in the tables (which have a size that is a power of 2).private static double
ONE_OVER_R
Inverse of R.private static double
R
Start of tail.private UniformRandomProvider
rng
Underlying source of randomness.private static double[]
W
Auxiliary table.
-
Constructor Summary
Constructors Constructor Description ZigguratNormalizedGaussianSampler(UniformRandomProvider rng)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private double
fix(long hz, int iz)
Gets the value from the tail of the distribution.static <S extends NormalizedGaussianSampler & SharedStateContinuousSampler>
Sof(UniformRandomProvider rng)
Create a new normalised Gaussian sampler.private static double
pdf(double x)
Compute the Gaussian probability density functionf(x) = e^-0.5x^2
.double
sample()
Creates adouble
sample.java.lang.String
toString()
SharedStateContinuousSampler
withUniformRandomProvider(UniformRandomProvider rng)
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.commons.rng.sampling.distribution.ContinuousSampler
samples, samples
-
-
-
-
Field Detail
-
R
private static final double R
Start of tail.- See Also:
- Constant Field Values
-
ONE_OVER_R
private static final double ONE_OVER_R
Inverse of R.- See Also:
- Constant Field Values
-
LAST
private static final int LAST
Index of last entry in the tables (which have a size that is a power of 2).- See Also:
- Constant Field Values
-
K
private static final long[] K
Auxiliary table.
-
W
private static final double[] W
Auxiliary table.
-
F
private static final double[] F
Auxiliary table.
-
rng
private final UniformRandomProvider rng
Underlying source of randomness.
-
-
Constructor Detail
-
ZigguratNormalizedGaussianSampler
public ZigguratNormalizedGaussianSampler(UniformRandomProvider rng)
- Parameters:
rng
- Generator of uniformly distributed random numbers.
-
-
Method Detail
-
sample
public double sample()
Creates adouble
sample.- Specified by:
sample
in interfaceContinuousSampler
- Returns:
- a sample.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
fix
private double fix(long hz, int iz)
Gets the value from the tail of the distribution.- Parameters:
hz
- Start random integer.iz
- Index of cell corresponding tohz
.- Returns:
- the requested random value.
-
pdf
private static double pdf(double x)
Compute the Gaussian probability density functionf(x) = e^-0.5x^2
.- Parameters:
x
- Argument.- Returns:
- \( e^{-\frac{x^2}{2}} \)
-
withUniformRandomProvider
public SharedStateContinuousSampler withUniformRandomProvider(UniformRandomProvider rng)
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.- Specified by:
withUniformRandomProvider
in interfaceSharedStateSampler<SharedStateContinuousSampler>
- Parameters:
rng
- Generator of uniformly distributed random numbers.- Returns:
- the sampler
- Since:
- 1.3
-
of
public static <S extends NormalizedGaussianSampler & SharedStateContinuousSampler> S of(UniformRandomProvider rng)
Create a new normalised Gaussian sampler.- Type Parameters:
S
- Sampler type.- Parameters:
rng
- Generator of uniformly distributed random numbers.- Returns:
- the sampler
- Since:
- 1.3
-
-