The `dqrng`

package provides several fast random number
generators together with fast functions for generating random numbers
according to a uniform, normal and exponential distribution. These
functions are modeled after the `base`

functions
`set.seed`

, `RNGkind`

, `runif`

,
`rnorm`

, and `rexp`

.

```
dqRNGkind(kind, normal_kind = "ignored")
dqrunif(n, min = 0, max = 1)
dqrnorm(n, mean = 0, sd = 1)
dqrexp(n, rate = 1)
dqset.seed(seed, stream = NULL)
```

- kind
string specifying the RNG (see details)

- normal_kind
ignored; included for compatibility with

`RNGkind`

- n
number of observations

- min
lower limit of the uniform distribution

- max
upper limit of the uniform distribution

- mean
mean value of the normal distribution

- sd
standard deviation of the normal distribution

- rate
rate of the exponential distribution

- seed
integer scalar to seed the random number generator, or an integer vector of length 2 representing a 64-bit seed. Maybe

`NULL`

, see details.- stream
integer used for selecting the RNG stream; either a scalar or a vector of length 2

`dqrunif`

, `dqrnorm`

, and `dqrexp`

return a numeric vector of length `n`

.

Supported RNG kinds:

- pcg64
The default 64 bit variant from the PCG family developed by Melissa O'Neill. See https://www.pcg-random.org/ for more details.

- Xoroshiro128+ and Xoshiro256+
RNGs developed by David Blackman and Sebastiano Vigna. They are used as default RNGs in Erlang and Lua. See https://xoshiro.di.unimi.it/ for more details.

- Threefry
The 64 bit version of the 20 rounds Threefry engine as provided by

`sitmo-package`

Xoroshiro128+ is the default since it is the fastest generator provided by this package.

The functions `dqrnorm`

and `dqrexp`

use the Ziggurat algorithm as
provided by `boost.random`

.

See `generateSeedVectors`

for rapid generation of integer-vector
seeds that provide 64 bits of entropy. These allow full exploration of
the state space of the 64-bit RNGs provided in this package.

If the provided `seed`

is `NULL`

, a seed is genenrated from R's RNG
without state alteration.

```
library(dqrng)
# Set custom RNG.
dqRNGkind("Xoshiro256+")
# Use an integer scalar to set a seed.
dqset.seed(42)
# Use integer scalars to set a seed and the stream.
dqset.seed(42, 123)
# Use an integer vector to set a seed.
dqset.seed(c(31311L, 24123423L))
# Use an integer vector to set a seed and a scalar to select the stream.
dqset.seed(c(31311L, 24123423L), 123)
# Random sampling from distributions.
dqrunif(5, min = 2, max = 10)
#> [1] 9.254756 2.169924 3.232695 8.859045 4.940842
dqrexp(5, rate = 4)
#> [1] 0.003025477 0.213876337 0.008051277 0.399246137 0.066848602
dqrnorm(5, mean = 5, sd = 3)
#> [1] 1.399092 7.411358 7.145729 2.308440 6.766659
```