Class RandomEngine

  • All Implemented Interfaces:
    Serializable, Cloneable, DoubleUnaryOperator, IntUnaryOperator
    Direct Known Subclasses:
    MersenneTwister

    public abstract class RandomEngine
    extends Object
    implements DoubleUnaryOperator, IntUnaryOperator
    Abstract base class for uniform pseudo-random number generating engines.

    Most probability distributions are obtained by using a uniform pseudo-random number generation engine followed by a transformation to the desired distribution. Thus, subclasses of this class are at the core of computational statistics, simulations, Monte Carlo methods, etc.

    Subclasses produce uniformly distributed int's and long's in the closed intervals [Integer.MIN_VALUE,Integer.MAX_VALUE] and [Long.MIN_VALUE,Long.MAX_VALUE], respectively, as well as float's and double's in the open unit intervals (0.0f,1.0f) and (0.0,1.0), respectively.

    Subclasses need to override one single method only: nextInt(). All other methods generating different data types or ranges are usually layered upon nextInt(). long's are formed by concatenating two 32 bit int's. float's are formed by dividing the interval [0.0f,1.0f] into 232 sub intervals, then randomly choosing one subinterval. double's are formed by dividing the interval [0.0,1.0] into 264 sub intervals, then randomly choosing one subinterval.

    Note that this implementation is not synchronized.

    Version:
    1.0, 09/24/99
    See Also:
    MersenneTwister, MersenneTwister64, Random, Serialized Form
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected RandomEngine()
      Makes this class non instantiable, but still let's others inherit from it.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      double applyAsDouble​(double dummy)
      Equivalent to raw().
      int applyAsInt​(int dummy)
      Equivalent to nextInt().
      Object clone()
      Returns a copy of the receiver.
      static RandomEngine makeDefault()
      Constructs and returns a new uniform random number engine seeded with the current time.
      double nextDouble()
      Returns a 64 bit uniformly distributed random number in the open unit interval (0.0,1.0) (excluding 0.0 and 1.0).
      float nextFloat()
      Returns a 32 bit uniformly distributed random number in the open unit interval (0.0f,1.0f) (excluding 0.0f and 1.0f).
      abstract int nextInt()
      Returns a 32 bit uniformly distributed random number in the closed interval [Integer.MIN_VALUE,Integer.MAX_VALUE] (including Integer.MIN_VALUE and Integer.MAX_VALUE);
      long nextLong()
      Returns a 64 bit uniformly distributed random number in the closed interval [Long.MIN_VALUE,Long.MAX_VALUE] (including Long.MIN_VALUE and Long.MAX_VALUE).
      double raw()
      Returns a 32 bit uniformly distributed random number in the open unit interval (0.0,1.0) (excluding 0.0 and 1.0).
    • Constructor Detail

      • RandomEngine

        protected RandomEngine()
        Makes this class non instantiable, but still let's others inherit from it.
    • Method Detail

      • applyAsDouble

        public double applyAsDouble​(double dummy)
        Equivalent to raw(). This has the effect that random engines can now be used as function objects, returning a random number upon function evaluation.
        Specified by:
        applyAsDouble in interface DoubleUnaryOperator
      • applyAsInt

        public int applyAsInt​(int dummy)
        Equivalent to nextInt(). This has the effect that random engines can now be used as function objects, returning a random number upon function evaluation.
        Specified by:
        applyAsInt in interface IntUnaryOperator
      • makeDefault

        public static RandomEngine makeDefault()
        Constructs and returns a new uniform random number engine seeded with the current time. Currently this is MersenneTwister.
        Returns:
        the engine
      • nextDouble

        public double nextDouble()
        Returns a 64 bit uniformly distributed random number in the open unit interval (0.0,1.0) (excluding 0.0 and 1.0).
        Returns:
        the random number
      • nextFloat

        public float nextFloat()
        Returns a 32 bit uniformly distributed random number in the open unit interval (0.0f,1.0f) (excluding 0.0f and 1.0f).
        Returns:
        the random number
      • nextInt

        public abstract int nextInt()
        Returns a 32 bit uniformly distributed random number in the closed interval [Integer.MIN_VALUE,Integer.MAX_VALUE] (including Integer.MIN_VALUE and Integer.MAX_VALUE);
        Returns:
        the random number
      • nextLong

        public long nextLong()
        Returns a 64 bit uniformly distributed random number in the closed interval [Long.MIN_VALUE,Long.MAX_VALUE] (including Long.MIN_VALUE and Long.MAX_VALUE).
        Returns:
        the random number
      • raw

        public double raw()
        Returns a 32 bit uniformly distributed random number in the open unit interval (0.0,1.0) (excluding 0.0 and 1.0).
        Returns:
        the random number
      • clone

        public Object clone()
        Returns a copy of the receiver. This default implementation does not nothing except making the otherwise protected clone method public.
        Overrides:
        clone in class Object
        Returns:
        a copy of the receiver.