Intel® oneAPI Math Kernel Library Developer Reference - Fortran

Distribution Generators

oneMKLVS 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.

Continuous Distribution Generators

Type of Distribution

Data Types

BRNG Data Type

Description

vRngUniform

s, d

s, d

Uniform continuous distribution on the interval [a,b)

vRngGaussian

s, d

s, d

Normal (Gaussian) distribution

vRngGaussianMV

s, d

s, d

Normal (Gaussian) multivariate distribution

vRngExponential

s, d

s, d

Exponential distribution

vRngLaplace

s, d

s, d

Laplace distribution (double exponential distribution)

vRngWeibull

s, d

s, d

Weibull distribution

vRngCauchy

s, d

s, d

Cauchy distribution

vRngRayleigh

s, d

s, d

Rayleigh distribution

vRngLognormal

s, d

s, d

Lognormal distribution

vRngGumbel

s, d

s, d

Gumbel (extreme value) distribution

vRngGamma

s, d

s, d

Gamma distribution

vRngBeta

s, d

s, d

Beta distribution

vRngChiSquare

s, d

s, d

Chi-Square distribution

 

Discrete Distribution Generators

Type of Distribution

Data Types

BRNG Data Type

Description

vRngUniform

i

d

Uniform discrete distribution on the interval [a,b)

vRngUniformBits

i

i

Underlying BRNG integer recurrence

vRngUniformBits32

i

i

Uniformly distributed bits in 32-bit chunks

vRngUniformBits64

i

i

Uniformly distributed bits in 64-bit chunks

vRngBernoulli

i

s

Bernoulli distribution

vRngGeometric

i

s

Geometric distribution

vRngBinomial

i

d

Binomial distribution

vRngHypergeometric

i

d

Hypergeometric distribution

vRngPoisson

i

s (for VSL_RNG_METHOD_POISSON_POISNORM)

s (for distribution parameter λ 27) and d (for λ < 27) (for VSL_RNG_METHOD_POISSON_PTPE)

Poisson distribution

vRngPoisson

i

s

Poisson distribution with varying mean

vRngNegBinomial

i

d

Negative binomial distribution, or Pascal distribution

vRngMultinomial

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 Generators Supporting Accurate Mode

Type of Distribution

Data Types

vRngUniform

s, d

vRngExponential

s, d

vRngWeibull

s, d

vRngRayleigh

s, d

vRngLognormal

s, d

vRngGamma

s, d

vRngBeta

s, d

See additional details about accurate and fast mode of random number generation in VS Notes.

New method names

The current version of oneMKL has a modified structure of VS RNG method names. (SeeRNG Naming Conventions for details.) The old names are kept for backward compatibility. The tables below set correspondence between the new and legacy method names for VS random number generators.

Method Names for Continuous Distribution Generators

RNG

Legacy Method Name

New Method Name

vRngUniform

VSL_METHOD_SUNIFORM_STD, VSL_METHOD_DUNIFORM_STD, VSL_METHOD_SUNIFORM_STD_ACCURATE, VSL_METHOD_DUNIFORM_STD_ACCURATE

VSL_RNG_METHOD_UNIFORM_STD, VSL_RNG_METHOD_UNIFORM_STD_ACCURATE

vRngGaussian

VSL_METHOD_SGAUSSIAN_BOXMULLER, VSL_METHOD_SGAUSSIAN_BOXMULLER2, VSL_METHOD_SGAUSSIAN_ICDF, VSL_METHOD_DGAUSSIAN_BOXMULLER, VSL_METHOD_DGAUSSIAN_BOXMULLER2, VSL_METHOD_DGAUSSIAN_ICDF

VSL_RNG_METHOD_GAUSSIAN_BOXMULLER, VSL_RNG_METHOD_GAUSSIAN_BOXMULLER2, VSL_RNG_METHOD_GAUSSIAN_ICDF

vRngGaussianMV

VSL_METHOD_SGAUSSIANMV_BOXMULLER, VSL_METHOD_SGAUSSIANMV_BOXMULLER2, VSL_METHOD_SGAUSSIANMV_ICDF, VSL_METHOD_DGAUSSIANMV_BOXMULLER, VSL_METHOD_DGAUSSIANMV_BOXMULLER2, VSL_METHOD_DGAUSSIANMV_ICDF

VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER, VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2, VSL_RNG_METHOD_GAUSSIANMV_ICDF

vRngExponential

VSL_METHOD_SEXPONENTIAL_ICDF, VSL_METHOD_DEXPONENTIAL_ICDF, VSL_METHOD_SEXPONENTIAL_ICDF_ACCURATE, VSL_METHOD_DEXPONENTIAL_ICDF_ACCURATE

VSL_RNG_METHOD_EXPONENTIAL_ICDF, VSL_RNG_METHOD_EXPONENTIAL_ICDF_ACCURATE

vRngLaplace

VSL_METHOD_SLAPLACE_ICDF, VSL_METHOD_DLAPLACEL_ICDF

VSL_RNG_METHOD_LAPLACE_ICDF

vRngWeibull

VSL_METHOD_SWEIBULL_ICDF, VSL_METHOD_DWEIBULL_ICDF, VSL_METHOD_SWEIBULL_ICDF_ACCURATE, VSL_METHOD_DWEIBULL_ICDF_ACCURATE

VSL_RNG_METHOD_WEIBULL_ICDF, VSL_RNG_METHOD_WEIBULL_ICDF_ACCURATE

vRngCauchy

VSL_METHOD_SCAUCHY_ICDF, VSL_METHOD_DCAUCHY_ICDF

VSL_RNG_METHOD_CAUCHY_ICDF

vRngRayleigh

VSL_METHOD_SRAYLEIGH_ICDF, VSL_METHOD_DRAYLEIGH_ICDF, VSL_METHOD_SRAYLEIGH_ICDF_ACCURATE, VSL_METHOD_DRAYLEIGH_ICDF_ACCURATE

VSL_RNG_METHOD_RAYLEIGH_ICDF, VSL_RNG_METHOD_RAYLEIGH_ICDF_ACCURATE

vRngLognormal

VSL_METHOD_SLOGNORMAL_BOXMULLER2, VSL_METHOD_DLOGNORMAL_BOXMULLER2, VSL_METHOD_SLOGNORMAL_BOXMULLER2_ACCURATE, VSL_METHOD_DLOGNORMAL_BOXMULLER2_ACCURATE

VSL_RNG_METHOD_LOGNORMAL_BOXMULLER2, VSL_RNG_METHOD_LOGNORMAL_BOXMULLER2_ACCURATE

VSL_METHOD_SLOGNORMAL_ICDF, VSL_METHOD_DLOGNORMAL_ICDF, VSL_METHOD_SLOGNORMAL_ICDF_ACCURATE, VSL_METHOD_DLOGNORMAL_ICDF_ACCURATE

VSL_RNG_METHOD_LOGNORMAL_ICDF, VSL_RNG_METHOD_LOGNORMAL_ICDF_ACCURATE

vRngGumbel

VSL_METHOD_SGUMBEL_ICDF, VSL_METHOD_DGUMBEL_ICDF

VSL_RNG_METHOD_GUMBEL_ICDF

vRngGamma

VSL_METHOD_SGAMMA_GNORM, VSL_METHOD_DGAMMA_GNORM, VSL_METHOD_SGAMMA_GNORM_ACCURATE, VSL_METHOD_DGAMMA_GNORM_ACCURATE

VSL_RNG_METHOD_GAMMA_GNORM, VSL_RNG_METHOD_GAMMA_GNORM_ACCURATE

vRngBeta

VSL_METHOD_SBETA_CJA, VSL_METHOD_DBETA_CJA, VSL_METHOD_SBETA_CJA_ACCURATE, VSL_METHOD_DBETA_CJA_ACCURATE

VSL_RNG_METHOD_BETA_CJA, VSL_RNG_METHOD_BETA_CJA_ACCURATE

 

Method Names for Discrete Distribution Generators

RNG

Legacy Method Name

New Method Name

vRngUniform

VSL_METHOD_IUNIFORM_STD

VSL_RNG_METHOD_UNIFORM_STD

vRngUniformBits

VSL_METHOD_IUNIFORMBITS_STD

VSL_RNG_METHOD_UNIFORMBITS_STD

vRngBernoulli

VSL_METHOD_IBERNOULLI_ICDF

VSL_RNG_METHOD_BERNOULLI_ICDF

vRngGeometric

VSL_METHOD_IGEOMETRIC_ICDF

VSL_RNG_METHOD_GEOMETRIC_ICDF

vRngBinomial

VSL_METHOD_IBINOMIAL_BTPE

VSL_RNG_METHOD_BINOMIAL_BTPE

vRngHypergeometric

VSL_METHOD_IHYPERGEOMETRIC_H2PE

VSL_RNG_METHOD_HYPERGEOMETRIC_H2PE

vRngPoisson

VSL_METHOD_IPOISSON_PTPE, VSL_METHOD_IPOISSON_POISNORM

VSL_RNG_METHOD_POISSON_PTPE, VSL_RNG_METHOD_POISSON_POISNORM

vRngPoissonV

VSL_METHOD_IPOISSONV_POISNORM

VSL_RNG_METHOD_POISSONV_POISNORM

vRngNegBinomial

VSL_METHOD_INEGBINOMIAL_NBAR

VSL_RNG_METHOD_NEGBINOMIAL_NBAR