Package arc.math
Class Rand
java.lang.Object
java.util.Random
arc.math.Rand
- All Implemented Interfaces:
Serializable,RandomGenerator
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 than
Random'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:
-
Nested Class Summary
Nested classes/interfaces inherited from interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanchance(double chance) longgetState(int seed) Returns the internal seeds to allow state saving.protected final intnext(int bits) This protected method is final because, contrary to the superclass, it's not used anymore by the other methods.booleanReturns a pseudo-random, uniformly distributedbooleanvalue from this random number generator's sequence.voidnextBytes(byte[] bytes) Generates random bytes and places them into a user-supplied byte array.doubleReturns a pseudo-random, uniformly distributeddoublevalue between 0.0 and 1.0 from this random number generator's sequence.floatReturns a pseudo-random, uniformly distributedfloatvalue between 0.0 and 1.0 from this random number generator's sequence.intnextInt()Returns the next pseudo-random, uniformly distributedintvalue from this random number generator's sequence.intnextInt(int n) Returns a pseudo-random, uniformly distributedintvalue between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.longnextLong()Returns the next pseudo-random, uniformly distributedlongvalue from this random number generator's sequence.longnextLong(long n) Returns a pseudo-random, uniformly distributedlongvalue between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.floatrandom(float max) floatrandom(float min, float max) intrandom(int max) Inclusive.intrandom(int min, int max) floatrange(float amount) intrange(int amount) voidsetSeed(long seed) Sets the internal seed of this generator based on the givenlongvalue.voidsetState(long seed0, long seed1) Sets the internal state of this generator.Methods inherited from class java.util.Random
doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, nextGaussianMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.util.random.RandomGenerator
isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong
-
Field Details
-
seed0
public long seed0The first half of the internal state of this pseudo-random number generator. -
seed1
public long seed1The second half of the internal state of this pseudo-random number generator.
-
-
Constructor Details
-
Rand
public Rand()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
Randominstance to generate the initial seed. -
Rand
public Rand(long seed) Creates a new random number generator using a singlelongseed.- Parameters:
seed- the initial seed
-
Rand
public Rand(long seed0, long seed1) Creates a new random number generator using twolongseeds.- Parameters:
seed0- the first part of the initial seedseed1- the second part of the initial seed
-
-
Method Details
-
nextLong
public long nextLong()Returns the next pseudo-random, uniformly distributedlongvalue from this random number generator's sequence.Subclasses should override this, as this is used by all other methods.
- Specified by:
nextLongin interfaceRandomGenerator- Overrides:
nextLongin classRandom
-
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. -
nextInt
public int nextInt()Returns the next pseudo-random, uniformly distributedintvalue from this random number generator's sequence.This implementation uses
nextLong()internally.- Specified by:
nextIntin interfaceRandomGenerator- Overrides:
nextIntin classRandom
-
nextInt
public int nextInt(int n) Returns a pseudo-random, uniformly distributedintvalue between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.This implementation uses
nextLong()internally.- Specified by:
nextIntin interfaceRandomGenerator- Overrides:
nextIntin classRandom- Parameters:
n- the positive bound on the random number to be returned.- Returns:
- the next pseudo-random
intvalue between0(inclusive) andn(exclusive).
-
nextLong
public long nextLong(long n) Returns a pseudo-random, uniformly distributedlongvalue 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
longvalue between0(inclusive) andn(exclusive).
-
nextDouble
public double nextDouble()Returns a pseudo-random, uniformly distributeddoublevalue between 0.0 and 1.0 from this random number generator's sequence.This implementation uses
nextLong()internally.- Specified by:
nextDoublein interfaceRandomGenerator- Overrides:
nextDoublein classRandom
-
nextFloat
public float nextFloat()Returns a pseudo-random, uniformly distributedfloatvalue between 0.0 and 1.0 from this random number generator's sequence.This implementation uses
nextLong()internally.- Specified by:
nextFloatin interfaceRandomGenerator- Overrides:
nextFloatin classRandom
-
nextBoolean
public boolean nextBoolean()Returns a pseudo-random, uniformly distributedbooleanvalue from this random number generator's sequence.This implementation uses
nextLong()internally.- Specified by:
nextBooleanin interfaceRandomGenerator- Overrides:
nextBooleanin classRandom
-
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.- Specified by:
nextBytesin interfaceRandomGenerator- Overrides:
nextBytesin classRandom
-
setSeed
public void setSeed(long seed) Sets the internal seed of this generator based on the givenlongvalue.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:
setSeedin classRandom- Parameters:
seed- a nonzero seed for this generator (if zero, the generator will be seeded withLong.MIN_VALUE).
-
chance
public boolean chance(double chance) -
range
public float range(float amount) -
random
public float random(float max) -
random
public int random(int max) Inclusive. -
random
public float random(float min, float max) -
range
public int range(int amount) -
random
public int random(int min, int max) -
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
-