object
random(Algorithm)
Algorithm- Random number generator algorithm. One ofas183,splitmix64,xoshiro128pp,xoshiro128ss,xoshiro256pp,xoshiro256ss,well512a.
Portable random number generator predicates.
logtalk_load(random(loader))static, context_switching_calls
Multiple random number generators: To define multiple random number generators, simply extend this object. The derived objects must send to self the
reset_seed/0message.Randomness: Loading this object always initializes the random generator seed to the same value, thus providing a pseudo random number generator. The
randomize/1predicate can be used to initialize the seed with a random value.
as183: Algorithm AS 183 from Applied Statistics. 32-bit PRNG with period 2^60. Not cryptographically secure.
xoshiro128pp: Xoshiro128++ random number generator. 32-bit state-of-the-art PRNG with period 2^128-1. Algorithm by David Blackman and Sebastiano Vigna.
xoshiro128ss: Xoshiro128** random number generator. 32-bit PRNG with period 2^128-1. Algorithm by David Blackman and Sebastiano Vigna.
xoshiro256pp: Xoshiro256++ random number generator. 64-bit state-of-the-art PRNG with period 2^256-1. Algorithm by David Blackman and Sebastiano Vigna.
xoshiro256ss: Xoshiro256** random number generator. 64-bit PRNG with period 2^256-1. Algorithm by David Blackman and Sebastiano Vigna.
splitmix64: SplitMix64 random number generator. 64-bit PRNG primarily used for seeding other generators. Algorithm by Guy L. Steele Jr. et al.
well512a: WELL512a 16x32-bit state-of-the-art PRNG with period 2^512-1. Algorithm by by François Panneton, Pierre L’Ecuyer, and Makoto Matsumoto.Algorithms backend compatibility: The SplitMix64, Xoshiro256++, and Xoshiro256** algorithms require support for unbound integer arithmetic.
Public predicates
reset_seed/0
Resets the random generator seed to its default value. Use get_seed/1 and set_seed/1 instead if you need reproducibility.
static, synchronizedreset_seed - onerandomize/1
Randomizes the random generator using a positive integer to compute a new seed. Use of a large integer is recommended. In alternative, when using a small integer argument, discard the first dozen random values.
static, synchronizedrandomize(Seed)randomize(+positive_integer) - oneProtected predicates
(no local declarations; see entity ancestors if any)
Private predicates
seed_/2
Stores the current random generator seed (a ground but otherwise opaque term).
dynamicseed_(Algorithm,Seed)seed_(+atom,-ground) - oneOperators
(none)
See also