Class UniformLongSampler
java.lang.Object
org.apache.commons.rng.sampling.distribution.UniformLongSampler
- All Implemented Interfaces:
LongSampler, SharedStateLongSampler, SharedStateSampler<SharedStateLongSampler>
- Direct Known Subclasses:
UniformLongSampler.FixedUniformLongSampler, UniformLongSampler.LargeRangeUniformLongSampler, UniformLongSampler.OffsetUniformLongSampler, UniformLongSampler.PowerOf2RangeUniformLongSampler, UniformLongSampler.SmallRangeUniformLongSampler
Discrete uniform distribution sampler generating values of type
long.
Sampling uses UniformRandomProvider.nextLong().
When the range is a power of two the number of calls is 1 per sample.
Otherwise a rejection algorithm is used to ensure uniformity. In the worst
case scenario where the range spans half the range of a long
(263 + 1) the expected number of calls is 2 per sample.
- Since:
- 1.4
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final classDiscrete uniform distribution sampler when the sample value is fixed.private static final classDiscrete uniform distribution sampler when the range between lower and upper is too large to fit in a positive long.private static final classAdds an offset to an underlying discrete sampler.private static final classDiscrete uniform distribution sampler when the range is a power of 2 and greater than 1.private static final classDiscrete uniform distribution sampler when the range is small enough to fit in a positive long. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final UniformRandomProviderUnderlying source of randomness. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static UniformLongSamplercreateZeroBoundedSampler(UniformRandomProvider rng, long upper) Create a new sampler for the range0inclusive toupperinclusive.private static booleanisPowerOf2(long value) Checks if the value is a power of 2.static UniformLongSamplerof(UniformRandomProvider rng, long lower, long upper) Creates a new discrete uniform distribution sampler.toString()abstract UniformLongSamplerCreate 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 Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface LongSampler
sample, samples, samples
-
Field Details
-
rng
Underlying source of randomness.
-
-
Constructor Details
-
UniformLongSampler
UniformLongSampler(UniformRandomProvider rng) - Parameters:
rng- Generator of uniformly distributed random numbers.
-
-
Method Details
-
toString
-
withUniformRandomProvider
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<SharedStateLongSampler>- Parameters:
rng- Generator of uniformly distributed random numbers.- Returns:
- the sampler
-
of
Creates a new discrete uniform distribution sampler.- Parameters:
rng- Generator of uniformly distributed random numbers.lower- Lower bound (inclusive) of the distribution.upper- Upper bound (inclusive) of the distribution.- Returns:
- the sampler
- Throws:
IllegalArgumentException- iflower > upper.
-
createZeroBoundedSampler
Create a new sampler for the range0inclusive toupperinclusive.This can handle any positive
upper.- Parameters:
rng- Generator of uniformly distributed random numbers.upper- Upper bound (inclusive) of the distribution. Must be positive.- Returns:
- the sampler
-
isPowerOf2
private static boolean isPowerOf2(long value) Checks if the value is a power of 2.This returns
truefor the valueLong.MIN_VALUEwhich can be handled as an unsigned long of 2^63.- Parameters:
value- Value.- Returns:
trueif a power of 2
-