29 Numerics library [numerics]

29.6 Random number generation [rand]

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

29.6.4.2 Class template discard_­block_­engine [rand.adapt.disc]

discard_­block_­engine Случайным образом номера адаптер двигателя производит случайные числа , выбранные из производства некоторых базового двигателя e. Состояние из объекта адаптера двигателя состоит из состояния своего базового двигателя и дополнительного целого числа . Размер государства равен размеру государства плюс . xi discard_­block_­engine x ei e n e 1

Алгоритм перехода отбрасывает все значения, кроме значений, из каждого блока значений, предоставленного . Переход между состояниями выполняется следующим образом: Если , переместите состояние из в и установите в . В любом случае, затем увеличивайте и продвигайте текущее состояние до . r>0 pr e nr e ei ei+pr n 0 n e ej ej+1

Алгоритм генерации выдает значение, возвращенное последним вызовом состояния при продвижении , как описано выше. e() e

template<class Engine, size_t p, size_t r>
  class discard_block_engine {
  public:
    // types
    using result_type = typename Engine::result_type;

    // engine characteristics
    static constexpr size_t block_size = p;
    static constexpr size_t used_block = r;
    static constexpr result_type min() { return Engine::min(); }
    static constexpr result_type max() { return Engine::max(); }

    // constructors and seeding functions
    discard_block_engine();
    explicit discard_block_engine(const Engine& e);
    explicit discard_block_engine(Engine&& e);
    explicit discard_block_engine(result_type s);
    template<class Sseq> explicit discard_block_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
    int n;      // exposition only
  };

Имеют место следующие отношения: 0 < r и r <= p.

Текстовое представление состоит из текстового представления, за которым следует значение . e n

В дополнение к своему поведению в соответствии с разделом [rand.req.adapt]каждый конструктор, который не является конструктором копирования, устанавливает n значение 0.