public class XorShift1024StarRandomGenerator extends AbstractRandomGenerator
Warning: the parameters of this generator have changed in version 2.1.7.
More details about xorshift* generators can be found in my paper “An experimental exploration of Marsaglia's xorshift generators,
scrambled”, 2014.
Note that this is
not a cryptographic-strength pseudorandom number generator, but its quality is
preposterously higher than Random's, and its cycle length is
21024 − 1, which is more than enough for any application (it is actually
possible to define analogously a generator with cycle length 24096 − 1,
but its interest is eminently academic).
The methods of this class returns the same sequences as those of
XorShift1024StarRandom, to which documentation we refer for more details, but this class is not a subclass of Random,
which unfortunately suffers from a very poor design and is very heavy on memory.
If you need a large number of generators that do not need to be an instance
of Random, or simply if you need a RandomGenerator to use
with Commons Math,
you might be wanting this class instead of XorShift1024StarRandom.
If you want to use less memory at the expense of the period, consider using XorShift128PlusRandomGenerator or XorShift64StarRandomGenerator.
XorShift1024StarRandom| Constructor and Description |
|---|
XorShift1024StarRandomGenerator()
Creates a new generator seeded using
Util.randomSeed(). |
XorShift1024StarRandomGenerator(long seed)
Creates a new generator using a given seed.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
nextBoolean() |
void |
nextBytes(byte[] bytes) |
double |
nextDouble() |
float |
nextFloat() |
int |
nextInt() |
int |
nextInt(int n) |
long |
nextLong() |
long |
nextLong(long n)
Returns a pseudorandom uniformly distributed
long value
between 0 (inclusive) and the specified value (exclusive), drawn from
this random number generator's sequence. |
void |
setSeed(long seed)
Sets the seed of this generator.
|
void |
setState(long[] state,
int p)
Sets the state of this generator.
|
clear, nextGaussian, setSeed, setSeedpublic XorShift1024StarRandomGenerator()
Util.randomSeed().public XorShift1024StarRandomGenerator(long seed)
seed - a nonzero seed for the generator (if zero, the generator will be seeded with -1).public long nextLong()
nextLong in interface RandomGeneratornextLong in class AbstractRandomGeneratorpublic int nextInt()
nextInt in interface RandomGeneratornextInt in class AbstractRandomGeneratorpublic int nextInt(int n)
nextInt in interface RandomGeneratornextInt in class AbstractRandomGeneratorpublic long nextLong(long n)
long value
between 0 (inclusive) and the specified value (exclusive), drawn from
this random number generator's sequence. The algorithm used to generate
the value guarantees that the result is uniform, provided that the
sequence of 64-bit values produced by this generator is.n - the positive bound on the random number to be returned.long value between 0 (inclusive) and n (exclusive).public double nextDouble()
nextDouble in interface RandomGeneratornextDouble in class AbstractRandomGeneratorpublic float nextFloat()
nextFloat in interface RandomGeneratornextFloat in class AbstractRandomGeneratorpublic boolean nextBoolean()
nextBoolean in interface RandomGeneratornextBoolean in class AbstractRandomGeneratorpublic void nextBytes(byte[] bytes)
nextBytes in interface RandomGeneratornextBytes in class AbstractRandomGeneratorpublic void setSeed(long seed)
The argument will be used to seed a XorShift64StarRandomGenerator, whose output
will in turn be used to seed this generator. This approach makes “warmup” unnecessary,
and makes the possibility of starting from a state
with a large fraction of bits set to zero astronomically small.
setSeed in interface RandomGeneratorsetSeed in class AbstractRandomGeneratorseed - a nonzero seed for the generator (if zero, the generator will be seeded with -1).public void setState(long[] state,
int p)
The internal state of the generator will be reset, and the state array filled with the provided array.
state - an array of 16 longs; at least one must be nonzero.p - the internal index.