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

public abstract class UniformLongSampler extends Object implements SharedStateLongSampler
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
  • Field Details

  • Constructor Details

    • UniformLongSampler

      UniformLongSampler(UniformRandomProvider rng)
      Parameters:
      rng - Generator of uniformly distributed random numbers.
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • withUniformRandomProvider

      public abstract UniformLongSampler 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 interface SharedStateSampler<SharedStateLongSampler>
      Parameters:
      rng - Generator of uniformly distributed random numbers.
      Returns:
      the sampler
    • of

      public static UniformLongSampler of(UniformRandomProvider rng, long lower, long upper)
      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 - if lower > upper.
    • createZeroBoundedSampler

      private static UniformLongSampler createZeroBoundedSampler(UniformRandomProvider rng, long upper)
      Create a new sampler for the range 0 inclusive to upper inclusive.

      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 true for the value Long.MIN_VALUE which can be handled as an unsigned long of 2^63.

      Parameters:
      value - Value.
      Returns:
      true if a power of 2