--- concepts.qbk 2010-03-30 21:23:27.000000000 +0300 +++ concepts.new 2010-03-30 21:21:37.000000000 +0300 @@ -238,6 +238,46 @@ [endsect] +[section Quasi-Random Number Generator] + +A quasi-random number generator is a __PseudoRandomNumberGenerator which +provides a deterministic sequence of quasi-random numbers, based on some +algorithm and internal state. [classref boost::random::niederreiter_base2 +Niederreiter Base 2] generator is an example of such a [prng quasi-random +number generator]. The "quasi" modifier is used to denote more clearly that the +values produced by such a generator are neither random nor pseudo-random, but +they form a low discrepancy sequence. Such sequences share some properties of +random variables and in certain applications such as the quasi-Monte Carlo method +their lower discrepancy is an important advantage. + +[note Quasi-random sequences are known to give efficient numerical integration +rules in many Bayesian statistical problems where the posterior distribution can be +transformed into periodic functions on the n-dimensional hypercube.] + +Harold Niederreiter gives an extensive overview on random number generation +and quasi-Monte Carlo methods in his book "Random number generation and +quasi-Monte Carlo methods, Society for Industrial and Applied Mathematics, 1992". + +In addition to the __PseudoRandomNumberGenerator requirements, +a quasi-random number generator has some additional requirements. In the +following table, `X` denotes a quasi-random number generator class, and `v` is +a const value of `X`. + +[table QuasiRandomNumberGenerator requirements + [[expression] [return type] [pre/post-condition]] + [[`X::dimension`] [std::size_t] [compile-time constant. If it exists, it is equal to v.dim()]] + [[`X::dim()`] [std::size_t] [the dimension of quasi-random domain. It must be no less than 1. + The return value of this function shall not change during the lifetime of the object.]] + ] + +[note The `operator()` returns a successive element of an n-dimensional (n = `X::dimension`) vector +at each invocation. When all elements are exhausted, `operator()` begins anew with the starting +element of a subsequent n-dimensional vector.] + +The class __niederreiter_base2 is a model for a quasi-random number generator. + +[endsect] + [section Random Distribution] A random distribution produces random numbers distributed according to some