public abstract class AbstractRandomGenerator extends Object implements RandomGenerator
RandomGenerator
interface.
Default implementations for all methods other than nextDouble()
and setSeed(long)
are provided.
All data generation methods are based on code nextDouble()
. Concrete implementations must
override this method and should provide better / more performant implementations of the other
methods if the underlying PRNG supplies them.
Constructor and Description |
---|
AbstractRandomGenerator() |
Modifier and Type | Method and Description |
---|---|
void |
clear()
Clears the cache used by the default implementation of
nextGaussian() . |
boolean |
nextBoolean()
Returns the next pseudorandom, uniformly distributed
boolean value from this random number generator's
sequence. |
void |
nextBytes(byte[] bytes)
Generates random bytes and places them into a user-supplied
byte array.
|
abstract double |
nextDouble()
Returns the next pseudorandom, uniformly distributed
double value between 0.0 and 1.0
from this random number generator's sequence. |
float |
nextFloat()
Returns the next pseudorandom, uniformly distributed
float value between 0.0 and 1.0 from
this random
number generator's sequence. |
double |
nextGaussian()
Returns the next pseudorandom, Gaussian ("normally") distributed
double value with mean 0.0 and
standard
deviation 1.0 from this random number generator's sequence. |
int |
nextInt()
Returns the next pseudorandom, uniformly distributed
int value from this random number generator's
sequence. |
int |
nextInt(int n)
Returns a pseudorandom, uniformly distributed
int value
between 0 (inclusive) and the specified value (exclusive), drawn from
this random number generator's sequence. |
long |
nextLong()
Returns the next pseudorandom, uniformly distributed
long value from this random number generator's
sequence. |
void |
setSeed(int seed)
Sets the seed of the underlying random number generator using an
int seed. |
void |
setSeed(int[] seed)
Sets the seed of the underlying random number generator using an
int array seed. |
abstract void |
setSeed(long seed)
Sets the seed of the underlying random number generator using a
long seed. |
public void clear()
nextGaussian()
. Implementations that do not
override the
default implementation of nextGaussian
should call this
method in the implementation of setSeed(long)
public void setSeed(int seed)
int
seed.
Sequences of values generated starting with the same seeds should be identical.
setSeed
in interface RandomGenerator
seed
- the seed valuepublic void setSeed(int[] seed)
int
array seed.
Sequences of values generated starting with the same seeds should be identical.
setSeed
in interface RandomGenerator
seed
- the seed valuepublic abstract void setSeed(long seed)
long
seed. Sequences of values generated
starting with the
same seeds should be identical.
Implementations that do not override the default implementation of nextGaussian
should include a call to
clear()
in the implementation of this method.
setSeed
in interface RandomGenerator
seed
- the seed valuepublic void nextBytes(byte[] bytes)
The default implementation fills the array with bytes extracted from random integers generated using
nextInt()
.
nextBytes
in interface RandomGenerator
bytes
- the non-null byte array in which to put the
random bytespublic int nextInt()
int
value from this random number generator's
sequence.
All 232 possible int
values
should be produced with (approximately) equal probability.
The default implementation provided here returns
(int) (nextDouble() * Integer.MAX_VALUE)
nextInt
in interface RandomGenerator
int
value from this random number generator's
sequencepublic int nextInt(int n)
int
value
between 0 (inclusive) and the specified value (exclusive), drawn from
this random number generator's sequence.
The default implementation returns
(int) (nextDouble() * n
nextInt
in interface RandomGenerator
n
- the bound on the random number to be returned. Must be
positive.int
value between 0 (inclusive) and n (exclusive).NotStrictlyPositiveException
- if n <= 0
.public long nextLong()
long
value from this random number generator's
sequence. All
264 possible long
values
should be produced with (approximately) equal probability.
The default implementation returns
(long) (nextDouble() * Long.MAX_VALUE)
nextLong
in interface RandomGenerator
long
value from this random number generator's
sequencepublic boolean nextBoolean()
boolean
value from this random number generator's
sequence.
The default implementation returns
nextDouble() <= 0.5
nextBoolean
in interface RandomGenerator
boolean
value from this random number generator's
sequencepublic float nextFloat()
float
value between 0.0
and 1.0
from
this random
number generator's sequence.
The default implementation returns
(float) nextDouble()
nextFloat
in interface RandomGenerator
float
value between 0.0
and 1.0
from
this
random number generator's sequencepublic abstract double nextDouble()
double
value between 0.0
and 1.0
from this random number generator's sequence.
This method provides the underlying source of random data used by the other methods.
nextDouble
in interface RandomGenerator
double
value between 0.0
and 1.0
from this random number generator's sequencepublic double nextGaussian()
double
value with mean 0.0
and
standard
deviation 1.0
from this random number generator's sequence.
The default implementation uses the Polar Method due to G.E.P. Box, M.E. Muller and G. Marsaglia, as described in D. Knuth, The Art of Computer Programming, 3.4.1C.
The algorithm generates a pair of independent random values. One of these is cached for reuse, so the full
algorithm is not executed on each activation. Implementations that do not override this method should make sure
to call clear()
to clear the cached value in the implementation of setSeed(long)
.
nextGaussian
in interface RandomGenerator
double
value with mean 0.0
and
standard deviation 1.0
from this random number
generator's sequenceCopyright © 2021 CNES. All rights reserved.