29 Numerics library [numerics]

29.6 Random number generation [rand]

29.6.4 Random number engine adaptor class templates [rand.adapt]

29.6.4.3 Class template independent_­bits_­engine [rand.adapt.ibits]

Anindependent_­bits_­engine адаптер сочетает в себе случайное число случайных чисел двигателей, которые производятся некоторым базовым двигателемe, таким образом , чтобы произвести случайные числа с заданным количеством битовw. Состояние из объекта адаптера двигателя состоит из состояния своего базового двигателя ; размер государства - это размер российского государства. xiindependent_­bits_­enginexei ee

Алгоритмы перехода и генерации описываются следующими интегральными константами:

  1. a)Пусть R=e.max() - e.min() + 1 и m=log2R.

  2. b)С ,n как определено ниже, пусть w0=w/n, n0=nwmodn, y0=2w0R/2w0и y1=2w0+1R/2w0+1.

  3. c)Пусть n=w/m тогда и только тогда, когда в результате соотношение Ry0y0/n выполняется. Иначе пусть n=1+w/m.

[ Note: Отношение w=n0w0+(nn0)(w0+1) всегда сохраняется. ]end note

Алгоритм перехода выполняется путем вызова по мере необходимости для получения значений меньше чем и значений меньше чем .e()n0y0+e.min()nn0y1+e.min()

Алгоритм генерации использует значения, полученные при продвижении состояния, как описано выше, чтобы получить количество, полученное, как если бы по следующему алгоритму: S

S = 0;
for (k = 0; kn0; k += 1)  {
 do u = e() - e.min(); while (uy0);
 S = 2w0S+umod2w0;
}
for (k = n0; kn; k += 1)  {
 do u = e() - e.min(); while (uy1);
 S = 2w0+1S+umod2w0+1;
}

template<class Engine, size_t w, class UIntType>
  class independent_bits_engine {
  public:
    // types
    using result_type = UIntType;

    // engine characteristics
    static constexpr result_type min() { return 0; }
    static constexpr result_type max() { return 2w1; }

    // constructors and seeding functions
    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);

    // generating functions
    result_type operator()();
    void discard(unsigned long long z);

    // property functions
    const Engine& base() const noexcept { return e; };

  private:
    Engine e;   // exposition only
  };

Имеют место следующие отношения: 0 < w и w <= numeric_­limits<result_­type>​::​digits.

Текстовое представление состоит из текстового представления .e