Class ContinuousUniformSampler

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