public class XorShift1024StarRandomGenerator extends AbstractRandomGenerator
More details can be found in my paper “An experimental exploration of
Marsaglia's xorshift generators, scrambled”, ACM Trans. Math. Softw., 2016, and
on the xoroshiro+/xorshift*/xorshift+
generators and the PRNG shootout page.
Note that this is not a cryptographic-strength pseudorandom number generator. Its period is 21024 − 1, which is more than enough for any massive parallel application (it is actually possible to define analogously a generator with period 24096 − 1, but its interest is eminently academic).
By using the supplied jump() method it is possible to generate non-overlapping long sequences
for parallel computations. This class provides also a split() method to support recursive parallel computations, in the spirit of
Java 8's SplittableRandom.
it.unimi.dsi.util,
Random,
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 |
|---|---|
void |
jump()
The the jump function for this generator.
|
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.
|
XorShift1024StarRandomGenerator |
split()
Returns a new instance that shares no mutable state
with this instance.
|
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 jump()
nextLong(); it can be used to generate 2512
non-overlapping subsequences for parallel computations.public XorShift1024StarRandomGenerator split()
public void setSeed(long seed)
The argument will be used to seed a SplitMix64RandomGenerator, whose output
will in turn be used to seed this generator. This approach makes “warmup” unnecessary,
and makes the probability 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.