29 Numerics library [numerics]

29.6 Random number generation [rand]

29.6.7 Utilities [rand.util]

29.6.7.2 Function template generate_­canonical [rand.util.canonical]

Each function instantiated from the template described in this section [rand.util.canonical] maps the result of one or more invocations of a supplied uniform random bit generator g to one member of the specified RealType such that, if the values gi produced by g are uniformly distributed, the instantiation's results tj, 0tj<1, are distributed as uniformly as possible as specified below.

[Note: Obtaining a value in this way can be a useful step in the process of transforming a value generated by a uniform random bit generator into a value that can be delivered by a random number distribution. end note]

template<class RealType, size_t bits, class URBG> RealType generate_canonical(URBG& g);

Complexity: Exactly k=max(1,b/log2R) invocations of g, where b273 is the lesser of numeric_­limits<RealType>​::​digits and bits, and R is the value of g.max()g.min()+1.

Effects: Invokes g() k times to obtain values g0,,gk1, respectively. Calculates a quantity

S=k1i=0(gig.min())Ri

using arithmetic of type RealType.

Returns: S/Rk.

Throws: What and when g throws.

b is introduced to avoid any attempt to produce more bits of randomness than can be held in RealType.