.. _distributions-template-parameter-method: Distributions Template Parameter Method ======================================= .. tabularcolumns:: |\Y{0.4}|\Y{0.2}|\Y{0.4}| .. list-table:: :header-rows: 1 :class: longtable * - Method Type - Distributions - Math Description * - ``uniform_method::standard`` ``uniform_method::accurate`` - ``uniform`` - Standard method. Currently there is only one method for these functions. ``uniform_method::accurate`` checks for additional ``s`` and ``d`` data types. For ``integer`` data types, it uses ``d`` as a ``BRNG`` data type (``s`` ``BRNG`` data type is used in ``uniform_method::standard`` method on GPU). * - ``gaussian_method::box_muller`` - ``gaussian`` - Generates normally distributed random number x thru the pair of uniformly distributed numbers u1 and u2 according to the formula: \ :math:`x = \sqrt {-2 \ln u_1} \sin {2 \pi u_2}`\ * - ``gaussian_method::box_muller2`` - ``gaussian`` - Generates normally distributed random numbers x1 and x2 thru the pair of uniformly distributed numbers u1 and u2 according to the formulas: \ :math:`x_1 = \sqrt{-2 \ln u_1} \sin {2 \pi u_2}`\ \ :math:`x_2 = \sqrt{-2 \ln u_1} \cos {2 \pi u_2}`\ Lognormal distribution: generated normally distributed random numbers x1 and x2 are converted to lognormal distribution. * - ``gaussian_method::icdf`` ``geometric_method::icdf`` - ``gaussian`` ``geometric`` - Inverse cumulative distribution function (ICDF) method. * - ``exponential_method::icdf`` ``exponential_method::icdf_accurate`` - ``exponential`` - Inverse cumulative distribution function (ICDF) method. * - ``weibull_method::icdf`` ``weibull_method::icdf_accurate`` - ``weibull`` - Inverse cumulative distribution function (ICDF) method. * - ``cauchy_method::icdf`` - ``cauchy`` - Inverse cumulative distribution function (ICDF) method. * - ``rayleigh_method::icdf`` ``rayleigh_method::icdf_accurate`` - ``rayleigh`` - Inverse cumulative distribution function (ICDF) method. * - ``lognormal_method::icdf`` ``lognormal_method::icdf_accurate`` - ``lognormal`` - Inverse cumulative distribution function (ICDF) method. * - ``lognormal_method::box_muller2`` ``lognormal_method::box_muller2_accurate`` - ``lognormal`` - Normally distributed random numbers x1 and x2 are produced through the pair of uniformly distributed numbers u1 and u2 according to the formulas: \ :math:`x_1 = -2 \ln u_1 \sin {2 \pi u_2}`\ \ :math:`x_2 = -2 \ln u_1 \cos {2 \pi u_2}`\ Then x1 and x2 are converted to lognormal distribution. * - ``gumbel_method::icdf`` - ``gumbel`` - Inverse cumulative distribution function (ICDF) method. * - ``bernoulli_method::icdf`` - ``bernoulli`` - Inverse cumulative distribution function (ICDF) method. * - ``gamma_method::marsaglia`` ``gamma_method::marsaglia_accurate`` - ``gamma`` - For ``α > 1``, a gamma distributed random number is generated as a cube of properly scaled normal random number; for ``0.6 ≤α < 1``, a gamma distributed random number is generated using rejection from Weibull distribution; for ``α < 0.6``, a gamma distributed random number is obtained using transformation of exponential power distribution; for ``α = 1``, gamma distribution is reduced to exponential distribution. * - ``beta_method::cja`` ``beta_method::cja_accurate`` - ``beta`` - Cheng-Johnk-Atkinson method. For ``min(p, q) > 1``, Cheng method is used; for ``min(p, q) < 1``, Johnk method is used, if ``q + K·p2+ C≤ 0 (K = 0.852..., C=-0.956...)`` otherwise, Atkinson switching algorithm is used; for ``max(p, q) < 1``, method of Johnk is used; for ``min(p, q) < 1, max(p, q)> 1``, Atkinson switching algorithm is used (CJA stands for Cheng, Johnk, Atkinson); for ``p = 1or q = 1``, inverse cumulative distribution function method is used; for ``p = 1`` and ``q = 1``, beta distribution is reduced to uniform distribution. * - ``chi_square_method::gamma_based`` - ``chi_square`` - (most common): If ``ν ≥ 17`` or ν is odd and ``5 ≤ ν ≤ 15``, a chi-square distribution is reduced to a Gamma distribution with these parameters: Shape ``α = ν / 2`` Offset a = 0 Scale factor ``β = 2``. The random numbers of the Gamma distribution are generated. * - ``gaussian_mv_method::box_muller`` ``gaussian_mv_method::box_muller2`` ``gaussian_mv_method::icdf`` - ``gaussian_mv`` - BoxMuller method for multivariate Gaussian distribution. BoxMuller_2 method for multivariate Gaussian distribution. Inverse cumulative distribution function (ICDF) method. * - ``binomial_method::btpe`` - ``binomial`` - Acceptance/rejection method for ``ntrial·min(p, 1p) ≥ 30`` with decomposition into four regions: Two parallelograms Triangle Left exponential tail Right exponenetial tail * - ``poisson_method::ptpe`` - ``poisson`` - Acceptance/rejection method for ``λ≥ 27`` with decomposition into four regions: Two parallelograms Triangle Left exponential tail Right exponenetial tail * - ``poisson_method::gaussian_icdf_based`` ``poisson_v_method::gaussian_icdf_based`` - ``poisson`` ``poisson_v`` - for ``λ≥ 1``, method based on Poisson inverse CDF approximation by Gaussian inverse CDF; for ``λ < 1``, table lookup method is used. * - ``hypergeometric_method::h2pe`` - ``hypergeometric`` - Acceptance/rejection method for large mode of distribution with decomposition into three regions: Rectangular Left exponential tail Right exponential tail * - ``negative_binomial_method::nbar`` - ``negative_binomial`` - Acceptance/rejection method for: \ :math:`\frac{(a-1) \cdot (1-p)}{p} \geq 100`\ with decomposition into five regions: Rectangular (\2) trapezoid Left exponential tail Right exponential tail * - ``multinomial_method::poisson_icdf_based`` - ``multinomial`` - Multinomial distribution with parameters ``m``, ``k``, and a probability vector ``p``. Random numbers of the multinomial distribution are generated by Poisson Approximation method.