The generation algorithm
uses the values produced
while advancing the state as described above
to yield a quantity
S
obtained as if by the following algorithm:
S = 0;
for (k = 0; k≠n0; k += 1) {
do u = e() - e.min(); while (u≥y0);
S = 2w0⋅S+umod2w0;
}
for (k = n0; k≠n; k += 1) {
do u = e() - e.min(); while (u≥y1);
S = 2w0+1⋅S+umod2w0+1;
}
template<class Engine, size_t w, class UIntType>
class independent_bits_engine {
public:
using result_type = UIntType;
static constexpr result_type min() { return 0; }
static constexpr result_type max() { return 2w−1; }
independent_bits_engine();
explicit independent_bits_engine(const Engine& e);
explicit independent_bits_engine(Engine&& e);
explicit independent_bits_engine(result_type s);
template<class Sseq> explicit independent_bits_engine(Sseq& q);
void seed();
void seed(result_type s);
template<class Sseq> void seed(Sseq& q);
result_type operator()();
void discard(unsigned long long z);
const Engine& base() const noexcept { return e; };
private:
Engine e;
};