62#ifdef BZ_HAVE_BOOST_SERIALIZATION
63#include <boost/serialization/serialization.hpp>
64#include <boost/serialization/vector.hpp>
69#if UINT_MAX < 4294967295U
81 typedef std::vector<twist_int>
State;
83 typedef State::iterator
Iter;
94 return (s1&1u) ?
K : 0u;
101 return ( (
s0&0x80000000) | (s1&0x7fffffff) ) >>1;
177 S[0] =
seed & 0xFFFFFFFF;
178 for (
SizeType mti=1; mti<
S.size(); ++mti) {
179 S[mti] = (1812433253U * (
S[mti-1] ^ (
S[mti-1] >> 30)) + mti);
180 S[mti] &= 0xffffffffU;
194 const SizeType n=seed_vector.size();
197 S[i] = (
S[i] ^ ((
S[i-1] ^ (
S[i-1] >> 30)) * 1664525U))
198 + seed_vector[j] + j;
201 if (i>=
N) {
S[0] =
S[
N-1]; i=1; }
204 for (k=
N-1; k; k--) {
205 S[i] = (
S[i] ^ ((
S[i-1] ^ (
S[i-1] >> 30)) * 1566083941UL))
209 if (i>=
N) {
S[0] =
S[
N-1]; i=1; }
227 for (
Iter pf_end =
S.begin()+(
N-
PF); p0 != pf_end; ++p0, ++pM)
229 *p0 = *pM ^
twist_ (p0[1]);
233 for (
Iter s_end =
S.begin()+(
N-1); p0 != s_end; ++p0, ++pM)
234 *p0 = *pM ^
twist_ (p0[1]);
259 State::difference_type
I;
264 std::istringstream is(s);
266 S =
State(std::istream_iterator<twist_int>(is),
267 std::istream_iterator<twist_int>());
270 operator bool()
const {
return !
S.empty(); }
273 return std::string();
274 std::ostringstream os;
276 std::copy(
S.begin(),
S.end(),
277 std::ostream_iterator<twist_int>(os,
" "));
280#ifdef BZ_HAVE_BOOST_SERIALIZATION
281 friend class boost::serialization::access;
284 template<
class T_arch>
285 void serialize(T_arch& ar,
const unsigned int version) {
300 std::cerr <<
"Error: state is empty" << std::endl;
332 static const unsigned int n=48;
This class creates MersenneTwisters with different parameters indexed by and ID number.
Definition mt.h:323
static const unsigned int n
Definition mt.h:332
static const twist_int a_[n]
Definition mt.h:333
static MersenneTwister create(unsigned int i)
Definition mt.h:325
static const twist_int c_[n]
Definition mt.h:335
static const twist_int b_[n]
Definition mt.h:334
mt_state(const std::string &s)
Definition mt.h:263
mt_state(State s, State::difference_type i)
Definition mt.h:262
State::difference_type I
Definition mt.h:259
mt_state()
Definition mt.h:261
std::string str() const
Definition mt.h:271
State S
Definition mt.h:258
MersenneTwister(twist_int initial_seed)
Definition mt.h:155
State S
Definition mt.h:315
void setState(const T_state &s)
Definition mt.h:298
void setState(const std::string &s)
Definition mt.h:306
const twist_int b_
Definition mt.h:313
const twist_int c_
Definition mt.h:313
std::string getStateString() const
Definition mt.h:294
MersenneTwister()
Definition mt.h:129
MersenneTwister(twist_int aa, twist_int bb, twist_int cc)
Definition mt.h:148
void initialize()
Definition mt.h:122
T_state getState() const
Definition mt.h:293
std::vector< twist_int > State
Definition mt.h:81
BitMixer twist_
Definition mt.h:312
mt_state T_state
Definition mt.h:292
void seed(twist_int seed=reference_seed)
Definition mt.h:171
Iter I
Definition mt.h:316
@ reference_seed
Definition mt.h:120
State::size_type SizeType
Definition mt.h:82
MersenneTwister(twist_int aa, twist_int bb, twist_int cc, twist_int initial_seed)
Definition mt.h:161
twist_int random(void)
Definition mt.h:241
State::iterator Iter
Definition mt.h:83
void reload(void)
Definition mt.h:218
void seed(State seed_vector)
Definition mt.h:188
#define bool
Definition compiler.h:100
unsigned long twist_int
Definition mt.h:70
twist_int low_mask(twist_int s1) const
Definition mt.h:91
BitMixer(twist_int k)
Definition mt.h:88
twist_int operator()(twist_int s1)
Definition mt.h:105
twist_int high_mask(twist_int s1) const
Definition mt.h:100
BitMixer()
Definition mt.h:87
const twist_int K
Definition mt.h:115
twist_int s0
Definition mt.h:114