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.57526411 0.01148055 0.58029005 0.44395955 0.61093344 0.25332274
#> [7] 0.64885060 0.91686337 0.22567609 0.04863733
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.99227312 0.86319739 0.82504209 0.87368575 0.04360787 0.18823797
#> [7] 0.11401189 0.52140158 0.64394389 0.13750303