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;
91 inline twist_int
low_mask (twist_int s1)
const {
94 return (s1&1u) ?
K : 0u;
101 return ( (
s0&0x80000000) | (s1&0x7fffffff) ) >>1;
162 twist_int initial_seed) :
twist_(aa),
b_(bb),
c_(cc)
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;
193 const SizeType
N=
S.size();
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) {
295 T_state tmp(
S,
I-
S.begin());
300 std::cerr <<
"Error: state is empty" << std::endl;
332 static const unsigned int n=48;
333 static const twist_int
a_[
n];
334 static const twist_int
b_[
n];
335 static const twist_int
c_[
n];
twist_int s0
Definition: mt.h:114
_bz_global blitz::IndexPlaceholder< 9 > r
Definition: indexexpr.h:265
twist_int random(void)
Definition: mt.h:241
void reload(void)
Definition: mt.h:218
State::size_type SizeType
Definition: mt.h:82
_bz_global blitz::IndexPlaceholder< 0 > i
Definition: indexexpr.h:256
BitMixer twist_
Definition: mt.h:312
State::iterator Iter
Definition: mt.h:83
static const twist_int b_[n]
Definition: mt.h:334
static const twist_int a_[n]
Definition: mt.h:333
_bz_global blitz::IndexPlaceholder< 1 > j
Definition: indexexpr.h:257
MersenneTwister(twist_int aa, twist_int bb, twist_int cc, twist_int initial_seed)
Definition: mt.h:161
MersenneTwister(twist_int aa, twist_int bb, twist_int cc)
Definition: mt.h:148
void seed(State seed_vector)
Definition: mt.h:188
static MersenneTwister create(unsigned int i)
Definition: mt.h:325
twist_int operator()(twist_int s1)
Definition: mt.h:105
This class creates MersenneTwisters with different parameters indexed by and ID number.
Definition: mt.h:322
void setState(const std::string &s)
Definition: mt.h:306
State::difference_type I
Definition: mt.h:259
twist_int low_mask(twist_int s1) const
Definition: mt.h:91
twist_int high_mask(twist_int s1) const
Definition: mt.h:100
unsigned long twist_int
Definition: mt.h:70
static const twist_int c_[n]
Definition: mt.h:335
void setState(const T_state &s)
Definition: mt.h:298
void initialize()
Definition: mt.h:122
mt_state T_state
Definition: mt.h:292
std::string str() const
Definition: mt.h:271
std::string getStateString() const
Definition: mt.h:294
MersenneTwister(twist_int initial_seed)
Definition: mt.h:155
_bz_global blitz::IndexPlaceholder< 2 > k
Definition: indexexpr.h:258
std::vector< twist_int > State
Definition: mt.h:81
T_state getState() const
Definition: mt.h:293
BitMixer(twist_int k)
Definition: mt.h:88
#define bool
Definition: compiler.h:100
static const unsigned int n
Definition: mt.h:332
mt_state(const std::string &s)
Definition: mt.h:263
const twist_int c_
Definition: mt.h:313
mt_state()
Definition: mt.h:261
MersenneTwister()
Definition: mt.h:129
_bz_global blitz::IndexPlaceholder< 10 > s
Definition: indexexpr.h:266
Iter I
Definition: mt.h:316
BitMixer()
Definition: mt.h:87
void seed(twist_int seed=reference_seed)
Definition: mt.h:171
_bz_global blitz::IndexPlaceholder< 5 > n
Definition: indexexpr.h:261
mt_state(State s, State::difference_type i)
Definition: mt.h:262
const twist_int b_
Definition: mt.h:313
State S
Definition: mt.h:315
const twist_int K
Definition: mt.h:115
State S
Definition: mt.h:258