[ Arithmetic | Reference Manual | Alphabetic Index ]
frandom(-F)
Generates a random floating-point number F in the range <0, 1>
- F
- Floating-point number or variable.
Description
frandom/1 unifies F with a random floating-point number 0.0 < F < 1.0.
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.
This can generate 2^31 of 2^52 possible double floats in the range.
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.
This can generate all 2^52 normal double floats in the range.
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.
This can generate 2^31 of 2^52 possible double floats in the range.
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
frandom/1 be reproducible, seed(Seed) can be called to initialise the
generator state.
Modes and Determinism
Examples
Success:
?- frandom(F1), frandom(F2).
F1 = 0.794873024241474
F2 = 0.31575316019158489
Yes (0.00s cpu)
?- set_flag(random_mode, xs).
Yes (0.00s cpu)
?- frandom(F1), frandom(F2).
F1 = 0.383486609149677
F2 = 0.26587075689945316
Yes (0.00s cpu)
?- seed(123), frandom(F).
F = 0.17839240843169679
Yes (0.00s cpu)
?- seed(123), frandom(F).
F = 0.17839240843169679
Yes (0.00s cpu)
See Also
seed / 1, random / 2