Class L64X128StarStar
- 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 "L64X128StarStarRandom"
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.
- Since:
- 1.5
- See Also:
-
Field Summary
Fields inherited from class org.apache.commons.rng.core.source64.AbstractL64X128
M, x0, x1
Fields inherited from class org.apache.commons.rng.core.source64.AbstractL64
la, ls
-
Constructor Summary
ConstructorsModifierConstructorDescriptionL64X128StarStar
(long[] seed) Creates a new instance.L64X128StarStar
(long seed0, long seed1, long seed2, long seed3) Creates a new instance using a 4 element seed.protected
L64X128StarStar
(L64X128StarStar source) Creates a copy instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected L64X128StarStar
copy()
Create a copy.private static SplittableUniformRandomProvider
create
(long seed, UniformRandomProvider source) Create a new instance using the givenseed
andsource
of randomness to initialise the instance.long
next()
Return the next random value.split
(UniformRandomProvider source) Creates a new random generator, split off from this one, that implements theSplittableUniformRandomProvider
interface.splits
(long streamSize, SplittableUniformRandomProvider source) Returns a stream producing the givenstreamSize
number of new random generators, each of which implements theSplittableUniformRandomProvider
interface.Methods inherited from class org.apache.commons.rng.core.source64.AbstractL64X128
getStateInternal, jump, longJump, setStateInternal
Methods inherited from class org.apache.commons.rng.core.source64.LongProvider
nextBoolean, nextInt, nextLong, resetCachedState
Methods inherited from class org.apache.commons.rng.core.BaseProvider
checkIndex, checkStateSize, composeStateInternal, extendSeed, extendSeed, fillState, fillState, restoreState, saveState, splitStateInternal, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.commons.rng.JumpableUniformRandomProvider
jumps, jumps
Methods inherited from interface org.apache.commons.rng.LongJumpableUniformRandomProvider
longJumps, longJumps
Methods inherited from interface org.apache.commons.rng.SplittableUniformRandomProvider
doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, split, splits, splits, splits
Methods inherited from interface org.apache.commons.rng.UniformRandomProvider
nextBoolean, nextBytes, nextBytes, nextDouble, nextDouble, nextDouble, nextFloat, nextFloat, nextFloat, nextInt, nextInt, nextInt, nextLong, nextLong, nextLong
-
Constructor Details
-
L64X128StarStar
public L64X128StarStar(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.
-
L64X128StarStar
public L64X128StarStar(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.
-
L64X128StarStar
Creates a copy instance.- Parameters:
source
- Source to copy.
-
-
Method Details
-
next
public long next()Return the next random value.- Specified by:
next
in interfaceRandomLongSource
- Returns:
- the next random value.
-
copy
Create a copy.- Specified by:
copy
in classAbstractL64
- Returns:
- the copy
-
split
Creates a new random generator, split off from this one, that implements theSplittableUniformRandomProvider
interface.- Specified by:
split
in 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 givenstreamSize
number of new random generators, each of which implements theSplittableUniformRandomProvider
interface.- Specified by:
splits
in 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 givenseed
andsource
of 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.
-