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 class
ContinuousUniformSampler.OpenIntervalContinuousUniformSampler
Specialization to sample from an open interval(lo, hi)
.
-
Field Summary
Fields Modifier and Type Field Description private double
hi
Higher bound.private double
lo
Lower bound.private static int
MIN_ULP_OPPOSITE_SIGN
The minimum ULP gap for the open interval when the doubles have the opposite sign.private static int
MIN_ULP_SAME_SIGN
The minimum ULP gap for the open interval when the doubles have the same sign.private UniformRandomProvider
rng
Underlying source of randomness.
-
Constructor Summary
Constructors Constructor Description ContinuousUniformSampler(UniformRandomProvider rng, double lo, double hi)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) double
getHi()
Gets the higher bound.(package private) double
getLo()
Gets the lower bound.private static boolean
lessThanUnsigned(long x, long y)
Compares twolong
values numerically treating the values as unsigned to test if the first value is less than the second value.static SharedStateContinuousSampler
of(UniformRandomProvider rng, double lo, double hi)
Creates a new continuous uniform distribution sampler.static SharedStateContinuousSampler
of(UniformRandomProvider rng, double lo, double hi, boolean excludeBounds)
Creates a new continuous uniform distribution sampler.double
sample()
Creates adouble
sample.java.lang.String
toString()
private static boolean
validateOpenInterval(double lo, double hi)
Check that the open interval is valid.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 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)
- Parameters:
rng
- Generator of uniformly distributed random numbers.lo
- Lower bound.hi
- Higher bound.
-
-
Method Detail
-
sample
public double sample()
Creates adouble
sample.- Specified by:
sample
in 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:
toString
in 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:
withUniformRandomProvider
in 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 whenx
isDouble.MIN_VALUE
.- Parameters:
rng
- Generator of uniformly distributed random numbers.lo
- Lower bound.hi
- Higher bound.excludeBounds
- Set totrue
to 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 twolong
values 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
-
-