[ Arithmetic | Reference Manual | Alphabetic Index ]
random(+Limit, -N)
-N is random(+Limit)
Generates a random integer N between 0 and Limit-1
- Limit
- Positive Integer
- N
- Integer or Variable.
Description
Generates a pseudo-random integer between 0 and Limit-1, and unifies
it with N. The numbers generated are uniformly distributed.
The algorithm used depends on the setting of the 'random_mode'
flag (see set_flag/2, get_flag/2):
- lcg (default)
-
Use a Linear Congruential Generator with a period of 2^31-1.
The sequence is reproducible independently of OS and HW.
The generator state is local to the calling engine.
- xs
-
Use a xorshift64* generator with a period of 2^64-1.
The sequence is reproducible independently of OS and HW.
The generator state is local to the calling engine.
- system
-
Use the random() or rand() library function.
The sequence may differ on different machines or OSs.
The generator state is shared with the whole process.
If it is required that the sequence produced by successive calls of
random/2 be reproducible, seed(Seed) can be called to initialise the
generator state.
Modes and Determinism
Exceptions
- (4) instantiation fault
- Limit is uninstantiated.
- (5) type error
- Limit is instantiated, but not to an integer.
- (6) out of range
- Limit is an integer outside the range 1..2^31
Examples
Success:
?- random(100, X).
X = 46
yes.
?- X is random(100).
X = 36
yes.
?- seed(1), X is random(100).
X = 71
yes.
?- seed(1), X is random(100).
X = 71
yes.
See Also
frandom / 1, seed / 1, get_flag / 2, set_flag / 2