Files
2025-10-25 03:02:53 +03:00

3.6 KiB
Raw Permalink Blame History

[rand.adapt.disc]

29 Numerics library [numerics]

29.5 Random number generation [rand]

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

29.5.5.2 Class template discard_block_engine [rand.adapt.disc]

1

#

A discard_block_engine random number engine adaptor produces random numbers selected from those produced by some base engine e.

The state xi of a discard_block_engine engine adaptor object x consists of the state ei of its base engine e and an additional integer n.

The size of the state is the size of e's state plus 1.

2

#

The transition algorithm discards all but r>0 values from each block of p ≥ r values delivered by e.

The state transition is performed as follows: If n ≥ r, advance the state of e from ei to ei+p−r and set n to 0.

In any case, then increment n and advance e's then-current state ej to ej+1.

3

#

The generation algorithm yields the value returned by the last invocation of e() while advancing e's state as described above.

🔗

namespace std {template<class Engine, size_t p, size_t r>class discard_block_engine {public:// typesusing result_type = typename Engine::result_type; // engine characteristicsstatic 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 explicit discard_block_engine(Sseq& q); void seed(); void seed(result_type s); template void seed(Sseq& q); // equality operatorsfriend bool operator==(const discard_block_engine& x, const discard_block_engine& y); // generating functions result_type operator()(); void discard(unsigned long long z); // property functionsconst Engine& base() const noexcept { return e; }// inserters and extractorstemplate<class charT, class traits>friend basic_ostream<charT, traits>&operator<<(basic_ostream<charT, traits>& os, const discard_block_engine& x); // hostedtemplate<class charT, class traits>friend basic_istream<charT, traits>&operator>>(basic_istream<charT, traits>& is, discard_block_engine& x); // hostedprivate: Engine e; // exposition only size_t n; // exposition only};}

4

#

The following relations shall hold: 0 < r and r <= p.

5

#

The textual representation consists of the textual representation of e followed by the value of n.

6

#

In addition to its behavior pursuant to subclause [rand.req.adapt], each constructor that is not a copy constructor sets n to 0.