object

# `fast_random(Algorithm)`

- `Algorithm` - Random number generator algorithm. One of `as183`, `splitmix64`, `xoshiro128pp`, `xoshiro128ss`, `xoshiro256pp`, `xoshiro256ss`, `well512a`.

Fast portable random number generator predicates.

Availability:
`logtalk_load(random(loader))`
Author: Paulo Moura
Version: 3:0:0
Date: 2026-02-23
Compilation flags:
`static, context_switching_calls`
Implements:
`public` pseudo_random_protocol
`public` sampling_protocol
Uses:
list
Remarks:

> - Single random number generator: This object provides a faster version of the `random` library object but does not support being extended to define multiple random number generators.

> - Randomness: Loading this object always initializes the random generator seed to the same value, thus providing a pseudo random number generator. The `randomize/1` predicate 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.

Inherited public predicates:
bernoulli/2 beta/3 between/3 binomial/3 chi_squared/2 circular_uniform_cartesian/3 circular_uniform_polar/3 dirichlet/2 enumerate/2 exponential/2 fisher/3 gamma/3 geometric/2 get_seed/1 gumbel/3 hypergeometric/4 logistic/3 lognormal/3 logseries/2 maybe/0 maybe/1 maybe/2 maybe_call/1 maybe_call/2 member/2 normal/3 permutation/2 poisson/2 power/2 random/1 random/3 randseq/4 randset/4 select/3 select/4 sequence/4 set/4 set_seed/1 standard_cauchy/3 standard_exponential/1 standard_gamma/2 standard_normal/1 standard_t/2 swap/2 swap_consecutive/2 triangular/4 uniform/1 uniform/3 von_mises/3 wald/3 weibull/3

## 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.

Compilation flags:
`static, synchronized`
Mode and number of proofs:
`reset_seed` - `one`

### `randomize/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.

Compilation flags:
`static, synchronized`
Template:
`randomize(Seed)`
Mode and number of proofs:
`randomize(+positive_integer)` - `one`

## Protected predicates

(no local declarations; see entity ancestors if any)

## Private predicates

### `seed_/2`

Stores the current random generator seed values (a ground but otherwise opaque term).

Compilation flags:
`dynamic`
Template:
`seed_(Algorithm,Seed)`
Mode and number of proofs:
`seed_(+atom,-ground)` - `one`

## Operators

(none)

See also

fast_random, random(Algorithm), random, backend_random