## 29.6 Random number generation [rand]

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, 0≤tj<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 b
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,…,gk−1, respectively.
Calculates a quantity

S=k−1∑i=0(gi−g.min())⋅Ri

using arithmetic of type
RealType.

Throws: What and when g throws.