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
  • Field Details

    • 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:
    • 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:
    • lo

      private final double lo
      Lower bound.
    • hi

      private final double hi
      Higher bound.
    • rng

      private final UniformRandomProvider rng
      Underlying source of randomness.
  • Constructor Details

    • 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 Details

    • sample

      public double sample()
      Creates a double sample.
      Specified by:
      sample in interface ContinuousSampler
      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 String toString()
      Overrides:
      toString in class SamplerBase
    • 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 interface SharedStateSampler<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 when x is Double.MIN_VALUE.

      Parameters:
      rng - Generator of uniformly distributed random numbers.
      lo - Lower bound.
      hi - Higher bound.
      excludeBounds - Set to true to use the open interval (lower, upper).
      Returns:
      the sampler
      Throws:
      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 two long 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 value
      y - the second value
      Returns:
      true if x < y