Anindependent_bits_engine адаптер сочетает в себе случайное число случайных чисел двигателей, которые производятся некоторым базовым двигателемe, таким образом , чтобы произвести случайные числа с заданным количеством битовw. Состояние из объекта адаптера двигателя состоит из состояния своего базового двигателя ; размер государства - это размер российского государства. xiindependent_bits_enginexei ee
Алгоритмы перехода и генерации описываются следующими интегральными константами:
a)Пусть R=e.max() - e.min() + 1 и m=⌊log2R⌋.
b)С ,n как определено ниже, пусть w0=⌊w/n⌋, n0=n−wmodn, y0=2w0⌊R/2w0⌋и y1=2w0+1⌊R/2w0+1⌋.
c)Пусть n=⌈w/m⌉ тогда и только тогда, когда в результате соотношение R−y0≤⌊y0/n⌋ выполняется. Иначе пусть n=1+⌈w/m⌉.
[ Note: Отношение w=n0w0+(n−n0)(w0+1) всегда сохраняется. ] — end note
Алгоритм перехода выполняется путем вызова по мере необходимости для получения значений меньше чем и значений меньше чем .e()n0y0+e.min()n−n0y1+e.min()
Алгоритм генерации использует значения, полученные при продвижении состояния, как описано выше, чтобы получить количество, полученное, как если бы по следующему алгоритму: S
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: // types using result_type = UIntType; // engine characteristics static constexpr result_type min() { return 0; } static constexpr result_type max() { return 2w−1; } // 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 };