Class ContinuousUniformSampler
- java.lang.Object
-
- org.apache.commons.rng.sampling.distribution.SamplerBase
-
- org.apache.commons.rng.sampling.distribution.ContinuousUniformSampler
-
- All Implemented Interfaces:
ContinuousSampler,SharedStateContinuousSampler,SharedStateSampler<SharedStateContinuousSampler>
- Direct Known Subclasses:
ContinuousUniformSampler.OpenIntervalContinuousUniformSampler
public class ContinuousUniformSampler extends SamplerBase implements SharedStateContinuousSampler
Sampling from a uniform distribution.Sampling uses
UniformRandomProvider.nextDouble().- Since:
- 1.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classContinuousUniformSampler.OpenIntervalContinuousUniformSamplerSpecialization to sample from an open interval(lo, hi).
-
Field Summary
Fields Modifier and Type Field Description private doublehiHigher bound.private doubleloLower bound.private static intMIN_ULP_OPPOSITE_SIGNThe minimum ULP gap for the open interval when the doubles have the opposite sign.private static intMIN_ULP_SAME_SIGNThe minimum ULP gap for the open interval when the doubles have the same sign.private UniformRandomProviderrngUnderlying source of randomness.
-
Constructor Summary
Constructors Constructor Description ContinuousUniformSampler(UniformRandomProvider rng, double lo, double hi)Create an instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) doublegetHi()Gets the higher bound.(package private) doublegetLo()Gets the lower bound.private static booleanlessThanUnsigned(long x, long y)Compares twolongvalues numerically treating the values as unsigned to test if the first value is less than the second value.static SharedStateContinuousSamplerof(UniformRandomProvider rng, double lo, double hi)Creates a new continuous uniform distribution sampler.static SharedStateContinuousSamplerof(UniformRandomProvider rng, double lo, double hi, boolean excludeBounds)Creates a new continuous uniform distribution sampler.doublesample()Creates adoublesample.java.lang.StringtoString()private static booleanvalidateOpenInterval(double lo, double hi)Check that the open interval is valid.SharedStateContinuousSamplerwithUniformRandomProvider(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 org.apache.commons.rng.sampling.distribution.SamplerBase
nextDouble, nextInt, nextInt, nextLong
-
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
-
MIN_ULP_SAME_SIGN
private static final int MIN_ULP_SAME_SIGN
The minimum ULP gap for the open interval when the doubles have the same sign.- See Also:
- Constant Field Values
-
MIN_ULP_OPPOSITE_SIGN
private static final int MIN_ULP_OPPOSITE_SIGN
The minimum ULP gap for the open interval when the doubles have the opposite sign.- See Also:
- Constant Field Values
-
lo
private final double lo
Lower bound.
-
hi
private final double hi
Higher bound.
-
rng
private final UniformRandomProvider rng
Underlying source of randomness.
-
-
Constructor Detail
-
ContinuousUniformSampler
public ContinuousUniformSampler(UniformRandomProvider rng, double lo, double hi)
Create an instance.- Parameters:
rng- Generator of uniformly distributed random numbers.lo- Lower bound.hi- Higher bound.
-
-
Method Detail
-
sample
public double sample()
Creates adoublesample.- Specified by:
samplein interfaceContinuousSampler- Returns:
- a sample.
-
getLo
double getLo()
Gets the lower bound. This is deliberately scoped as package private.- Returns:
- the lower bound
-
getHi
double getHi()
Gets the higher bound. This is deliberately scoped as package private.- Returns:
- the higher bound
-
toString
public java.lang.String toString()
- Overrides:
toStringin classSamplerBase
-
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:
withUniformRandomProviderin interfaceSharedStateSampler<SharedStateContinuousSampler>- Parameters:
rng- Generator of uniformly distributed random numbers.- Returns:
- the sampler
- Since:
- 1.3
-
of
public static SharedStateContinuousSampler of(UniformRandomProvider rng, double lo, double hi)
Creates a new continuous uniform distribution sampler.- Parameters:
rng- Generator of uniformly distributed random numbers.lo- Lower bound.hi- Higher bound.- Returns:
- the sampler
- Since:
- 1.3
-
of
public static SharedStateContinuousSampler of(UniformRandomProvider rng, double lo, double hi, boolean excludeBounds)
Creates a new continuous uniform distribution sampler.The bounds can be optionally excluded to sample from the open interval
(lower, upper). In this case if the bounds have the same sign the open interval must contain at least 1 double value between the limits; if the bounds have opposite signs the open interval must contain at least 2 double values between the limits excluding-0.0. Thus the interval(-x,x)will raise an exception whenxisDouble.MIN_VALUE.- Parameters:
rng- Generator of uniformly distributed random numbers.lo- Lower bound.hi- Higher bound.excludeBounds- Set totrueto use the open interval(lower, upper).- Returns:
- the sampler
- Throws:
java.lang.IllegalArgumentException- If the open interval is invalid.- Since:
- 1.4
-
validateOpenInterval
private static boolean validateOpenInterval(double lo, double hi)Check that the open interval is valid. It must contain at least one double value between the limits if the signs are the same, or two double values between the limits if the signs are different (excluding-0.0).- Parameters:
lo- Lower bound.hi- Higher bound.- Returns:
- false is the interval is invalid
-
lessThanUnsigned
private static boolean lessThanUnsigned(long x, long y)Compares twolongvalues numerically treating the values as unsigned to test if the first value is less than the second value.See Long.compareUnsigned(long, long) in JDK 1.8.
- Parameters:
x- the first valuey- the second value- Returns:
- true if
x < y
-
-