# Random Number Generators (RNG) Overview¶

Definitions

The pseudo-random number generator is defined by a structure($$S$$, $$\mu$$, $$f$$, $$U$$, $$g$$), where:

• $$S$$ is a finite set of states (the state space)

• $$\mu$$ is a probability distribution on $$S$$ for the initial state (or seed) $$s_0$$

• $$f:S \rightarrow S$$ is the transition function

• $$U$$ – a finite set of output symbols

• $$g:S \rightarrow U$$ an output function

The generation of random numbers is as follows:

1. Generate the initial state (called the seed) $$s_0$$ according to $$\mu$$ and compute $$u_0 = g(s_0)$$.

2. Iterate for $$i = 1 , ... ,$$ and $$u_i = g(s_i)$$. Output values $$u_i$$ are the so-called random numbers produced by the PRNG.

In computational statistics, random variate generation is usually made in two steps:

1. Generating imitations of independent and identically distributed (i.i.d.) random variables having the uniform distribution over the interval $$(0, 1)$$

2. Applying transformations to these i.i.d. $$U(0, 1)$$ random variates in order to generate (or imitate) random variates and random vectors from arbitrary distributions.

Structure

RNG domain contains two classes types:

• Engines (basic random number generators) classes, which holds the state of generator and is a source of i.i.d. random. Refer to Engines (Basic Random Number Generators) for a detailed description.

• Distribution classes templates (transformation classes) for different types of statistical distributions, for example, uniform, normal (Gaussian), binomial, etc. These classes contain all of the distribution’s parameters (including generation method). Refer to Distributions for a detailed description of the distributions.

The RNG domain also contains two types of free functions:

• Generation routines. The current routines are used to obtain random numbers from a given engine with proper statistics defined by a given distribution. Refer to the Generate Routine section for a detailed description.

• Service routines. The routines are used to modify the engine state. Refer to Service Routines for a description of these routines.

Engine classes work with both generation and service routines. Distribution classes are used in generation routines only. Refer to the oneMKL RNG Usage Model section for the description of typical RNG scenario.