...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::random::linear_feedback_shift_engine
// In header: <boost/random/linear_feedback_shift.hpp> template<typename UIntType, int w, int k, int q, int s> class linear_feedback_shift_engine { public: // types typedef UIntType result_type; // public static functions static constexpr result_type min(); static constexpr result_type max(); // public member functions linear_feedback_shift_engine(); explicit linear_feedback_shift_engine(UIntType); template<typename SeedSeq> explicit linear_feedback_shift_engine(SeedSeq &); template<typename It> linear_feedback_shift_engine(It &, It); void seed(); void seed(UIntType); template<typename SeedSeq> void seed(SeedSeq &); template<typename It> void seed(It &, It); result_type operator()(); template<typename Iter> void generate(Iter, Iter); void discard(boost::uintmax_t); // friend functions template<typename CharT, typename Traits> std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &, const linear_feedback_shift_engine &); template<typename CharT, typename Traits> std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &, const linear_feedback_shift_engine &); bool operator==(const linear_feedback_shift_engine &, const linear_feedback_shift_engine &); bool operator!=(const linear_feedback_shift_engine &, const linear_feedback_shift_engine &); // public data members static const bool has_fixed_range; static const int word_size; static const int exponent1; static const int exponent2; static const int step_size; static const UIntType default_seed; };
Instatiations of linear_feedback_shift
model a pseudo-random number generator . It was originally proposed in
"Random numbers generated by linear recurrence modulo two.", Tausworthe, R. C.(1965), Mathematics of Computation 19, 201-209.
linear_feedback_shift_engine
public member functionslinear_feedback_shift_engine();
Constructs a linear_feedback_shift_engine
, using the default seed.
explicit linear_feedback_shift_engine(UIntType s0);
Constructs a linear_feedback_shift_engine
, seeding it with s0.
template<typename SeedSeq> explicit linear_feedback_shift_engine(SeedSeq & seq);
Constructs a linear_feedback_shift_engine
, seeding it with seq.
template<typename It> linear_feedback_shift_engine(It & first, It last);
Constructs a linear_feedback_shift_engine
, seeding it with values from the range [first, last).
void seed();
Seeds a linear_feedback_shift_engine
with the default seed.
void seed(UIntType s0);
Seeds a linear_feedback_shift_engine
with s0
.
template<typename SeedSeq> void seed(SeedSeq & seq);
Seeds a linear_feedback_shift_engine
with values produced by seq.generate()
.
template<typename It> void seed(It & first, It last);
Seeds a linear_feedback_shift_engine
with values from the range [first, last).
result_type operator()();
Returns the next value of the generator.
template<typename Iter> void generate(Iter first, Iter last);
Fills a range with random values
void discard(boost::uintmax_t z);
Advances the state of the generator by z
.
linear_feedback_shift_engine
friend functionstemplate<typename CharT, typename Traits> std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > & os, const linear_feedback_shift_engine & x);
Writes the textual representation of the generator to a std::ostream
.
template<typename CharT, typename Traits> std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > & is, const linear_feedback_shift_engine & x);
Reads the textual representation of the generator from a std::istream
.
bool operator==(const linear_feedback_shift_engine & x, const linear_feedback_shift_engine & y);
Returns true if the two generators will produce identical sequences of outputs.
bool operator!=(const linear_feedback_shift_engine & lhs, const linear_feedback_shift_engine & rhs);
Returns true if the two generators will produce different sequences of outputs.