...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::subtract_with_carry_01_engine
// In header: <boost/random/subtract_with_carry.hpp> template<typename RealType, std::size_t w, std::size_t s, std::size_t r> class subtract_with_carry_01_engine { public: // types typedef RealType result_type; // public member functions subtract_with_carry_01_engine(); explicit subtract_with_carry_01_engine(boost::uint32_t); template<typename SeedSeq> explicit subtract_with_carry_01_engine(SeedSeq &); template<typename It> subtract_with_carry_01_engine(It &, It); void seed(); void seed(boost::uint32_t); template<typename SeedSeq> void seed(SeedSeq &); template<typename It> void seed(It &, It); result_type operator()(); void discard(boost::uintmax_t); template<typename Iter> void generate(Iter, Iter); // public static functions static constexpr result_type min(); static constexpr result_type max(); // friend functions template<typename CharT, typename Traits> std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &, const subtract_with_carry_01_engine &); template<typename CharT, typename Traits> std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &, const subtract_with_carry_01_engine &); bool operator==(const subtract_with_carry_01_engine &, const subtract_with_carry_01_engine &); bool operator!=(const subtract_with_carry_01_engine &, const subtract_with_carry_01_engine &); // public data members static const bool has_fixed_range; static const std::size_t word_size; static const std::size_t long_lag; static const std::size_t short_lag; static const boost::uint32_t default_seed; };
Instantiations of subtract_with_carry_01_engine model a pseudo-random number generator . The algorithm is described in
"A New Class of Random Number Generators", George Marsaglia and Arif Zaman, Annals of Applied Probability, Volume 1, Number 3 (1991), 462-480.
subtract_with_carry_01_engine
public member functionssubtract_with_carry_01_engine();
Creates a new subtract_with_carry_01_engine
using the default seed.
explicit subtract_with_carry_01_engine(boost::uint32_t value);
Creates a new subtract_with_carry_01_engine and seeds it with value.
template<typename SeedSeq> explicit subtract_with_carry_01_engine(SeedSeq & seq);
Creates a new subtract_with_carry_01_engine
and seeds with values produced by seq.generate().
template<typename It> subtract_with_carry_01_engine(It & first, It last);
Creates a new subtract_with_carry_01_engine
and seeds it with values from a range. Advances first to point one past the last consumed value. If the range does not contain enough elements to fill the entire state, throws std::invalid_argument
.
void seed();
Seeds the generator with the default seed.
void seed(boost::uint32_t value);
Seeds the generator with value
.
template<typename SeedSeq> void seed(SeedSeq & seq);
Seeds the generator with values produced by seq.generate()
.
template<typename It> void seed(It & first, It last);
Seeds the generator with values from a range. Updates first to point one past the last consumed element. If there are not enough elements in the range to fill the entire state, throws std::invalid_argument
.
result_type operator()();
Returns the next value of the generator.
void discard(boost::uintmax_t z);
Advances the state of the generator by z
.
template<typename Iter> void generate(Iter first, Iter last);
Fills a range with random values.
subtract_with_carry_01_engine
friend functionstemplate<typename CharT, typename Traits> std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > & os, const subtract_with_carry_01_engine & f);
Writes a subtract_with_carry_01_engine
to a std::ostream
.
template<typename CharT, typename Traits> std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > & is, const subtract_with_carry_01_engine & f);
Reads a subtract_with_carry_01_engine
from a std::istream
.
bool operator==(const subtract_with_carry_01_engine & x_, const subtract_with_carry_01_engine & y);
Returns true if the two generators will produce identical sequences.
bool operator!=(const subtract_with_carry_01_engine & lhs, const subtract_with_carry_01_engine & rhs);
Returns true if the two generators will produce different sequences.