#
# = Random Number Distributions
# This chapter describes functions for generating random variates and computing
# their probability distributions. Samples from the distributions described
# in this chapter can be obtained using any of the random number generators
# in the library as an underlying source of randomness.
#
# In the simplest cases a non-uniform distribution can be obtained analytically
# from the uniform distribution of a random number generator by applying an
# appropriate transformation. This method uses one call to the random number
# generator. More complicated distributions are created by the
# acceptance-rejection method, which compares the desired distribution against
# a distribution which is similar and known analytically. This usually requires
# several samples from the generator.
#
# The library also provides cumulative distribution functions and inverse
# cumulative distribution functions, sometimes referred to as quantile
# functions. The cumulative distribution functions and their inverses are
# computed separately for the upper and lower tails of the distribution,
# allowing full accuracy to be retained for small results.
#
# Contents:
# 1. {Introduction}[link:rdoc/randist_rdoc.html#1]
# 1. {The Gaussian Distribution}[link:rdoc/randist_rdoc.html#2]
# 1. {The Gaussian Tail Distribution}[link:rdoc/randist_rdoc.html#3]
# ...
# and more, see {the GSL reference}[http://www.gnu.org/software/gsl/manual/"target="_top]
# 1. {Shuffling and Sampling}[link:rdoc/randist_rdoc.html#7]
#
# == {}[link:index.html"name="1] Introduction
# Continuous random number distributions are defined by a probability density
# function, p(x), such that the probability of x occurring in the
# infinitesimal range x to x+dx is p dx.
#
# The cumulative distribution function for the lower tail P(x) is defined by the
# integral, and gives the probability of a variate taking a value less than x.
#
# The cumulative distribution function for the upper tail Q(x) is defined by the
# integral, and gives the probability of a variate taking a value greater than
# x.
#
# The upper and lower cumulative distribution functions are related
# by P(x) + Q(x) = 1 and satisfy 0 <= P(x) <= 1, 0 <= Q(x) <= 1.
#
# The inverse cumulative distributions, x=P^{-1}(P) and x=Q^{-1}(Q) give the
# values of x which correspond to a specific value of P or Q. They can be used
# to find confidence limits from probability values.
#
# For discrete distributions the probability of sampling the integer value k is
# given by p(k), where \sum_k p(k) = 1. The cumulative distribution for the
# lower tail P(k) of a discrete distribution is defined as, where the sum is
# over the allowed range of the distribution less than or equal to k.
#
# The cumulative distribution for the upper tail of a discrete distribution Q(k)
# is defined as giving the sum of probabilities for all values greater than k.
# These two definitions satisfy the identity P(k)+Q(k)=1.
#
# If the range of the distribution is 1 to n inclusive then P(n)=1, Q(n)=0
# while P(1) = p(1), Q(1)=1-p(1).
#
#
#
# == {}[link:index.html"name="2] The Gaussian Distribution
# ---
# * GSL::Rng#gaussian(sigma = 1)
# * GSL::Ran::gaussian(rng, sigma = 1)
# * GSL::Rng#ugaussian
# * GSL::Ran::ugaussian
#
# These return a Gaussian random variate, with mean zero and standard
# deviation sigma.
#
# ---
# * GSL::Ran::gaussian_pdf(x, sigma = 1)
#
# Computes the probability density p(x) at x for a Gaussian distribution
# with standard deviation sigma.
#
# ---
# * GSL::Rng#gaussian_ratio_method(sigma = 1)
# * GSL::Ran::gaussian_ratio_method(rng, sigma = 1)
#
# Use Kinderman-Monahan ratio method.
#
# ---
# * GSL::Cdf::gaussian_P(x, sigma = 1)
# * GSL::Cdf::gaussian_Q(x, sigma = 1)
# * GSL::Cdf::gaussian_Pinv(P, sigma = 1)
# * GSL::Cdf::gaussian_Qinv(Q, sigma = 1)
# * GSL::Cdf::ugaussian_P(x)
# * GSL::Cdf::ugaussian_Q(x)
# * GSL::Cdf::ugaussian_Pinv(P)
# * GSL::Cdf::ugaussian_Qinv(Q)
#
# These methods compute the cumulative distribution functions P(x), Q(x)
# and their inverses for the Gaussian distribution with standard
# deviation sigma.
#
# == {}[link:index.html"name="3] The Gaussian Tail Distribution
# ---
# * GSL::Rng#gaussian_tail(a, sigma = 1)
# * GSL::Ran#gaussian_tail(rng, a, sigma = 1)
# * GSL::Rng#ugaussian_tail(a)
# * GSL::Ran#ugaussian_tail(rng)
#
# These methods provide random variates from the upper tail of a Gaussian
# distribution with standard deviation sigma.
# The values returned are larger than the lower limit a, which must be positive.
#
# ---
# * GSL::Ran::gaussian_tail_pdf(x, a, sigma = 1)
# * GSL::Ran::ugaussian_tail_pdf(x, a)
#
# These methods compute the probability density p(x) at x for a Gaussian
# tail distribution with standard deviation sigma
# and lower limit a.
#
# == {}[link:index.html"name="4] The Bivariate Gaussian Distribution
# ---
# * GSL::Rng#bivariate_gaussian(sigma_x, sigma_y, rho)
# * GSL::Ran::bivariate_gaussian(rng, sigma_x, sigma_y, rho)
#
# These methods generate a pair of correlated gaussian variates,
# with mean zero, correlation coefficient rho and standard deviations
# sigma_x and sigma_y in the x and y directions.
#
# ---
# * GSL::Ran::bivariate_gaussian_pdf(x, y, sigma_x, sigma_y, rho)
#
# This method computes the probability density p(x,y) at (x,y)
# for a bivariate gaussian distribution with standard deviations
# sigma_x, sigma_y and correlation coefficient rho.
#
# == {}[link:index.html"name="5] The Exponential Distribution
# ---
# * GSL::Rng#exponential(mu)
# * GSL::Ran::exponential(rng, mu)
#
# These methods return a random variate from the exponential
# distribution with mean mu.
#
# ---
# * GSL::Ran::exponential_pdf(x, mu)
#
# This method computes the probability density p(x) at x
# for an exponential distribution with mean mu.
#
# ---
# * GSL::Cdf::exponential_P(x, mu)
# * GSL::Cdf::exponential_Q(x, mu)
# * GSL::Cdf::exponential_Pinv(P, mu)
# * GSL::Cdf::exponential_Qinv(Q, mu)
#
# These methods compute the cumulative distribution functions P(x), Q(x)
# and their inverses for the exponential distribution with mean mu.
#
# == {}[link:index.html"name="6] The Laplace Distribution
# ---
# * GSL::Rng#laplace(a)
# * GSL::Ran::laplace(rng, a)
#
# These methods return a random variate from the Laplace distribution
# with width a.
#
# ---
# * GSL::Ran::laplace_pdf(x, a)
#
# This method computes the probability density p(x) at x
# for a Laplace distribution with width a.
#
# ---
# * GSL::Cdf::laplace_P(x, a)
# * GSL::Cdf::laplace_Q(x, a)
# * GSL::Cdf::laplace_Pinv(P, a)
# * GSL::Cdf::laplace_Qinv(Q, a)
#
# These methods compute the cumulative distribution functions P(x), Q(x)
# and their inverses for the Laplace distribution with width a.
#
# ---
# * GSL::Rng#exppow(a, b)
# * GSL::Rng#cauchy(a)
# * GSL::Rng#rayleigh(sigma)
# * GSL::Rng#rayleigh_tail(a, sigma)
# * GSL::Rng#landau()
# * GSL::Rng#levy(c, alpha)
# * GSL::Rng#levy_skew(c, alpha, beta)
# * GSL::Rng#gamma(a, b)
# * GSL::Rng#flat(a, b)
# * GSL::Rng#lognormal(zeta, sigma)
# * GSL::Rng#chisq(nu)
# * GSL::Rng#fdist(nu1, nu2)
# * GSL::Rng#tdist(nu)
# * GSL::Rng#beta(a, b)
# * GSL::Rng#logistic(a)
# * GSL::Rng#pareto(a, b)
#
#
# ...
#
# and more, see {the GSL reference}[http://www.gnu.org/software/gsl/manual/gsl-ref_19.html#SEC286"target="_top].
#
# == {}[link:index.html"name="7] Shuffling and Sampling
# ---
# * GSL::Rng#shuffle(v, n)
#
# This randomly shuffles the order of n objects,
# stored in the {GSL::Vector}[link:rdoc/vector_rdoc.html] object v.
# ---
# * GSL::Rng#choose(v, k)
#
# This returns a {GSL::Vector}[link:rdoc/vector_rdoc.html] object with k objects
# taken randomly from the {GSL::Vector}[link:rdoc/vector_rdoc.html] object v.
#
# The objects are sampled without replacement, thus each object can only
# appear once in the returned vector. It is required that k be less
# than or equal to the length of the vector v.
#
# ---
# * GSL::Rng#sample(v, k)
#
# This method is like the method choose but samples k items
# from the original vector v with replacement, so the same object
# can appear more than once in the output sequence. There is no requirement
# that k be less than the length of v.
#
# {prev}[link:rdoc/qrng_rdoc.html]
# {next}[link:rdoc/stats_rdoc.html]
#
# {Reference index}[link:rdoc/ref_rdoc.html]
# {top}[link:index.html]
#
#