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;     };