# Distributions¶

oneMKLRNG routines are used to generate random numbers with different types of distribution. Each function group is introduced below by the type of underlying distribution and contains a short description of its functionality, as well as specifications of the call sequence and the explanation of input and output parameters. Table “Continuous Distribution Generators” and Table “Discrete Distribution Generators” list the random number generator routines with data types and output distributions, and sets correspondence between data types of the generator routines and the basic random number generators.

Type of Distribution

Data Types

BRNG Data Type

Description

oneapi::mkl::rng::uniform

s, d

s, d

Uniform continuous distribution on the interval [`a,b`)

oneapi::mkl::rng::gaussian

s, d

s, d

Normal (Gaussian) distribution

oneapi::mkl::rng::gaussian_mv

s, d

s, d

Normal (Gaussian) multivariate distribution

oneapi::mkl::rng::exponential

s, d

s, d

Exponential distribution

oneapi::mkl::rng::laplace

s, d

s, d

Laplace distribution (double exponential distribution)

oneapi::mkl::rng::weibull

s, d

s, d

Weibull distribution

oneapi::mkl::rng::cauchy

s, d

s, d

Cauchy distribution

oneapi::mkl::rng::rayleigh

s, d

s, d

Rayleigh distribution

oneapi::mkl::rng::lognormal

s, d

s, d

Lognormal distribution

oneapi::mkl::rng::gumbel

s, d

s, d

Gumbel (extreme value) distribution

oneapi::mkl::rng::gamma

s, d

s, d

Gamma distribution

oneapi::mkl::rng::beta

s, d

s, d

Beta distribution

oneapi::mkl::rng::chi_square

s, d

s, d

Chi-Square distribution

Type of Distribution

Data Types

BRNG Data Type

Description

oneapi::mkl::rng::uniform

i

d

Uniform discrete distribution on the interval [`a,b`)

oneapi::mkl::rng::uniform_bits

i

i

Uniformly distributed bits in 32-bit chunks

i

i

Uniformly distributed bits in 64-bit chunks

oneapi::mkl::rng::bits

i

i

Bits of underlying BRNG integer recurrence

oneapi::mkl::rng::bernoulli

i

s

Bernoulli distribution

oneapi::mkl::rng::geometric

i

s

Geometric distribution

oneapi::mkl::rng::binomial

i

d

Binomial distribution

oneapi::mkl::rng::hypergeometric

i

d

Hypergeometric distribution

oneapi::mkl::rng::poisson

i

s (for ) oneapi::mkl::rng::poisson_method::gaussian_icdf_based s (for distribution parameter λ≥ 27) and d (for λ < 27) (for oneapi::mkl::rng::poisson_method::ptpe)

Poisson distribution

oneapi::mkl::rng::poisson_v

i

s

Poisson distribution with varying mean

oneapi::mkl::rng::negative_binomial

i

d

Negative binomial distribution, or Pascal distribution

oneapi::mkl::rng::multinomial

i

d

Multinomial distribution

Modes of random number generation

The library provides two modes of random number generation, accurate and fast. Accurate generation mode is intended for the applications that are highly demanding to accuracy of calculations. When used in this mode, the generators produce random numbers lying completely within definitional domain for all values of the distribution parameters. For example, random numbers obtained from the generator of continuous distribution that is uniform on interval [`a`,`b`] belong to this interval irrespective of what `a` and `b` values may be. Fast mode provides high performance of generation and also guarantees that generated random numbers belong to the definitional domain except for some specific values of distribution parameters. The generation mode is set by specifying relevant value of the method parameter in generator routines. List of distributions that support accurate mode of generation is given in the table below.

Distribution

Distribution Method

oneapi::mkl::rng::uniform (s, d)

oneapi::mkl::rng::unform_method::standard_accurate

oneapi::mkl::rng::exponential

oneapi::mkl::rng::exponential_method::icdf_accurate

oneapi::mkl::rng::weibull

oneapi::mkl::rng::weibull_method::icdf_accurate

oneapi::mkl::rng::rayleigh

oneapi::mkl::rng::rayleigh_method::icdf_accurate

oneapi::mkl::rng::lognormal

oneapi::mkl::rng::lognormal_method::icdf_accurate oneapi::mkl::rng::lognormal_method::box_muller2_accurate

oneapi::mkl::rng::gamma

oneapi::mkl::rng::gamma_method::marsaglia_accurate

oneapi::mkl::rng::beta

oneapi::mkl::rng::beta_method::cja_accurate