Class L64X128Mix
- All Implemented Interfaces:
RandomLongSource, JumpableUniformRandomProvider, LongJumpableUniformRandomProvider, RestorableUniformRandomProvider, SplittableUniformRandomProvider, UniformRandomProvider
This is a member of the LXM family of generators: L=Linear congruential generator;
X=Xor based generator; and M=Mix. This member uses a 64-bit LCG and 128-bit Xor-based
generator. It is named as "L64X128MixRandom" in the java.util.random
package introduced in JDK 17; the LXM family is described in further detail in:
Steele and Vigna (2021) LXM: better splittable pseudorandom number generators (and almost as fast). Proceedings of the ACM on Programming Languages, Volume 5, Article 148, pp 1–31.
Memory footprint is 256 bits and the period is 264 (2128 - 1).
This generator implements
LongJumpableUniformRandomProvider.
In addition instances created with a different additive parameter for the LCG are robust
against accidental correlation in a multi-threaded setting. The additive parameters must be
different in the most significant 63-bits.
This generator implements
SplittableUniformRandomProvider.
The stream of generators created using the splits methods support parallelisation
and are robust against accidental correlation by using unique values for the additive parameter
for each instance in the same stream. The primitive streaming methods support parallelisation
but with no assurances of accidental correlation; each thread uses a new instance with a
randomly initialised state.
- Since:
- 1.5
- See Also:
-
Field Summary
Fields inherited from class AbstractL64X128
M, x0, x1Fields inherited from class AbstractL64
la, ls -
Constructor Summary
ConstructorsModifierConstructorDescriptionL64X128Mix(long[] seed) Creates a new instance.L64X128Mix(long seed0, long seed1, long seed2, long seed3) Creates a new instance using a 4 element seed.protectedL64X128Mix(L64X128Mix source) Creates a copy instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected L64X128Mixcopy()Create a copy.private static SplittableUniformRandomProvidercreate(long seed, UniformRandomProvider source) Create a new instance using the givenseedandsourceof randomness to initialise the instance.longnext()Return the next random value.split(UniformRandomProvider source) Creates a new random generator, split off from this one, that implements theSplittableUniformRandomProviderinterface.splits(long streamSize, SplittableUniformRandomProvider source) Returns a stream producing the givenstreamSizenumber of new random generators, each of which implements theSplittableUniformRandomProviderinterface.Methods inherited from class AbstractL64X128
getStateInternal, jump, longJump, setStateInternalMethods inherited from class LongProvider
nextBoolean, nextInt, nextLong, resetCachedStateMethods inherited from class BaseProvider
checkIndex, checkStateSize, composeStateInternal, extendSeed, extendSeed, fillState, fillState, restoreState, saveState, splitStateInternal, toStringMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface JumpableUniformRandomProvider
jumps, jumpsMethods inherited from interface LongJumpableUniformRandomProvider
longJumps, longJumpsMethods inherited from interface SplittableUniformRandomProvider
doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, split, splits, splits, splitsMethods inherited from interface UniformRandomProvider
nextBoolean, nextBytes, nextBytes, nextDouble, nextDouble, nextDouble, nextFloat, nextFloat, nextFloat, nextInt, nextInt, nextInt, nextLong, nextLong, nextLong
-
Constructor Details
-
L64X128Mix
public L64X128Mix(long[] seed) Creates a new instance.- Parameters:
seed- Initial seed. If the length is larger than 4, only the first 4 elements will be used; if smaller, the remaining elements will be automatically set. A seed containing all zeros in the last two elements will create a non-functional XBG sub-generator and a low quality output with a period of 264.The 1st element is used to set the LCG increment; the least significant bit is set to odd to ensure a full period LCG. The 2nd element is used to set the LCG state.
-
L64X128Mix
public L64X128Mix(long seed0, long seed1, long seed2, long seed3) Creates a new instance using a 4 element seed. A seed containing all zeros in the last two elements will create a non-functional XBG sub-generator and a low quality output with a period of 264.The 1st element is used to set the LCG increment; the least significant bit is set to odd to ensure a full period LCG. The 2nd element is used to set the LCG state.
- Parameters:
seed0- Initial seed element 0.seed1- Initial seed element 1.seed2- Initial seed element 2.seed3- Initial seed element 3.
-
L64X128Mix
Creates a copy instance.- Parameters:
source- Source to copy.
-
-
Method Details
-
next
public long next()Return the next random value.- Specified by:
nextin interfaceRandomLongSource- Returns:
- the next random value.
-
copy
Create a copy.- Specified by:
copyin classAbstractL64- Returns:
- the copy
-
split
Creates a new random generator, split off from this one, that implements theSplittableUniformRandomProviderinterface.- Specified by:
splitin interfaceSplittableUniformRandomProvider- Parameters:
source- A source of randomness used to initialise the new instance.- Returns:
- A new instance.
-
splits
public Stream<SplittableUniformRandomProvider> splits(long streamSize, SplittableUniformRandomProvider source) Returns a stream producing the givenstreamSizenumber of new random generators, each of which implements theSplittableUniformRandomProviderinterface.- Specified by:
splitsin interfaceSplittableUniformRandomProvider- Parameters:
streamSize- Number of objects to generate.source- A source of randomness used to initialise the new instances; this may be split to provide a source of randomness across a parallel stream.- Returns:
- a stream of random generators; the stream is limited to the given
streamSize.
-
create
Create a new instance using the givenseedandsourceof randomness to initialise the instance.- Parameters:
seed- Seed used to initialise the instance.source- Source of randomness used to initialise the instance.- Returns:
- A new instance.
-