Pseudo-random numbers on [0, 1) based on a linear congruential generator
Source: R/algorithm.R
rand_unit.RdGenerate pseudo-random numbers from \(X_{i+1} = (aX_i + c) \bmod{m}\), where \(X_1\) is the initial value (seed).
Arguments
- n
The desired length of the sequence.
- a, c, m
Parameters for the generator (see References for the default values).
- seed
The seed. The default is the system time when this function is called for the first time in the current session. For subsequent calls, the last \(X_i\) of the previous call will be used as the default seed.
Value
Random numbers on [0, 1) (i.e., \(X/m\) instead of \(X\)). Note
the unit interval is open on the right (excluding 1).
Note
All argument values must be smaller than \(2^{64}\) as they will be coerced to 64-bit integers.
References
Steele, Guy L. Jr.; Vigna, Sebastiano (2022). "Computationally easy, spectrally good multipliers for congruential pseudorandom number generators". Software: Practice and Experience. 52 (2): 443–458.
Examples
rand_unit(10)
#> [1] 0.8045837 0.3588343 0.8795523 0.3794542 0.4045251 0.2872007 0.9387585
#> [8] 0.9066949 0.8580771 0.1281573
rand_unit(10, seed = 0)
#> [1] 0 0 0 0 0 0 0 0 0 0
rand_unit(10, seed = 0) # identical results
#> [1] 0 0 0 0 0 0 0 0 0 0
rand_unit(10, seed = Sys.getpid())
#> [1] 0.9082035 0.0280703 0.2384318 0.7796860 0.1392984 0.4306503 0.9924310
#> [8] 0.6738641 0.5957795 0.7071619