Package com.badlogic.gdx.math
Class RandomXS128
- java.lang.Object
-
- java.util.Random
-
- com.badlogic.gdx.math.RandomXS128
-
- All Implemented Interfaces:
java.io.Serializable
public class RandomXS128 extends java.util.Random
This class implements the xorshift128+ algorithm that is a very fast, top-quality 64-bit pseudo-random number generator. The quality of this PRNG is much higher thanRandom
's, and its cycle length is 2128 − 1, which is more than enough for any single-thread application. More details and algorithms can be found here.Instances of RandomXS128 are not thread-safe.
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description RandomXS128()
Creates a new random number generator.RandomXS128(long seed)
Creates a new random number generator using a singlelong
seed.RandomXS128(long seed0, long seed1)
Creates a new random number generator using twolong
seeds.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description long
getState(int seed)
Returns the internal seeds to allow state saving.protected int
next(int bits)
This protected method is final because, contrary to the superclass, it's not used anymore by the other methods.boolean
nextBoolean()
Returns a pseudo-random, uniformly distributedboolean
value from this random number generator's sequence.void
nextBytes(byte[] bytes)
Generates random bytes and places them into a user-supplied byte array.double
nextDouble()
Returns a pseudo-random, uniformly distributeddouble
value between 0.0 and 1.0 from this random number generator's sequence.float
nextFloat()
Returns a pseudo-random, uniformly distributedfloat
value between 0.0 and 1.0 from this random number generator's sequence.int
nextInt()
Returns the next pseudo-random, uniformly distributedint
value from this random number generator's sequence.int
nextInt(int n)
Returns a pseudo-random, uniformly distributedint
value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.long
nextLong()
Returns the next pseudo-random, uniformly distributedlong
value from this random number generator's sequence.long
nextLong(long n)
Returns a pseudo-random, uniformly distributedlong
value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.void
setSeed(long seed)
Sets the internal seed of this generator based on the givenlong
value.void
setState(long seed0, long seed1)
Sets the internal state of this generator.
-
-
-
Constructor Detail
-
RandomXS128
public RandomXS128()
Creates a new random number generator. This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor.This implementation creates a
Random
instance to generate the initial seed.
-
RandomXS128
public RandomXS128(long seed)
Creates a new random number generator using a singlelong
seed.- Parameters:
seed
- the initial seed
-
RandomXS128
public RandomXS128(long seed0, long seed1)
Creates a new random number generator using twolong
seeds.- Parameters:
seed0
- the first part of the initial seedseed1
- the second part of the initial seed
-
-
Method Detail
-
nextLong
public long nextLong()
Returns the next pseudo-random, uniformly distributedlong
value from this random number generator's sequence.Subclasses should override this, as this is used by all other methods.
- Overrides:
nextLong
in classjava.util.Random
-
next
protected final int next(int bits)
This protected method is final because, contrary to the superclass, it's not used anymore by the other methods.- Overrides:
next
in classjava.util.Random
-
nextInt
public int nextInt()
Returns the next pseudo-random, uniformly distributedint
value from this random number generator's sequence.This implementation uses
nextLong()
internally.- Overrides:
nextInt
in classjava.util.Random
-
nextInt
public int nextInt(int n)
Returns a pseudo-random, uniformly distributedint
value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.This implementation uses
nextLong()
internally.- Overrides:
nextInt
in classjava.util.Random
- Parameters:
n
- the positive bound on the random number to be returned.- Returns:
- the next pseudo-random
int
value between0
(inclusive) andn
(exclusive).
-
nextLong
public long nextLong(long n)
Returns a pseudo-random, uniformly distributedlong
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.This implementation uses
nextLong()
internally.- Parameters:
n
- the positive bound on the random number to be returned.- Returns:
- the next pseudo-random
long
value between0
(inclusive) andn
(exclusive).
-
nextDouble
public double nextDouble()
Returns a pseudo-random, uniformly distributeddouble
value between 0.0 and 1.0 from this random number generator's sequence.This implementation uses
nextLong()
internally.- Overrides:
nextDouble
in classjava.util.Random
-
nextFloat
public float nextFloat()
Returns a pseudo-random, uniformly distributedfloat
value between 0.0 and 1.0 from this random number generator's sequence.This implementation uses
nextLong()
internally.- Overrides:
nextFloat
in classjava.util.Random
-
nextBoolean
public boolean nextBoolean()
Returns a pseudo-random, uniformly distributedboolean
value from this random number generator's sequence.This implementation uses
nextLong()
internally.- Overrides:
nextBoolean
in classjava.util.Random
-
nextBytes
public void nextBytes(byte[] bytes)
Generates random bytes and places them into a user-supplied byte array. The number of random bytes produced is equal to the length of the byte array.This implementation uses
nextLong()
internally.- Overrides:
nextBytes
in classjava.util.Random
-
setSeed
public void setSeed(long seed)
Sets the internal seed of this generator based on the givenlong
value.The given seed is passed twice through a hash function. This way, if the user passes a small value we avoid the short irregular transient associated with states having a very small number of bits set.
- Overrides:
setSeed
in classjava.util.Random
- Parameters:
seed
- a nonzero seed for this generator (if zero, the generator will be seeded withLong.MIN_VALUE
).
-
setState
public void setState(long seed0, long seed1)
Sets the internal state of this generator.- Parameters:
seed0
- the first part of the internal stateseed1
- the second part of the internal state
-
getState
public long getState(int seed)
Returns the internal seeds to allow state saving.- Parameters:
seed
- must be 0 or 1, designating which of the 2 long seeds to return- Returns:
- the internal seed that can be used in setState
-
-