14 #ifndef STXXL_RAND_HEADER
15 #define STXXL_RAND_HEADER
19 #ifdef STXXL_BOOST_RANDOM
20 #include <boost/random.hpp>
23 #include <stxxl/bits/common/types.h>
24 #include <stxxl/bits/common/seed.h>
34 __STXXL_BEGIN_NAMESPACE
36 extern unsigned ran32State;
43 typedef unsigned value_type;
48 return (ran32State = 1664525 * ran32State + 1013904223);
53 inline void srandom_number32(
unsigned seed = 0)
56 seed = get_next_seed();
65 typedef unsigned value_type;
66 mutable unsigned state;
71 seed = get_next_seed();
78 return (state = 1664525 * state + 1013904223);
86 typedef double value_type;
95 return (
double(rnd32()) * (0.5 / 0x80000000));
105 typedef double value_type;
106 #ifdef STXXL_BOOST_RANDOM
107 typedef boost::minstd_rand base_generator_type;
108 base_generator_type generator;
109 boost::uniform_real<> uni_dist;
110 mutable boost::variate_generator<base_generator_type &, boost::uniform_real<> > uni;
115 seed = get_next_seed();
116 uni.engine().seed(seed);
119 mutable unsigned short state48[3];
124 seed = get_next_seed();
125 state48[0] = seed & 0xffff;
126 state48[1] = seed >> 16;
135 #ifdef STXXL_BOOST_RANDOM
138 return erand48(state48);
144 template <
class UniformRGen_ = random_uniform_fast>
147 typedef unsigned value_type;
148 UniformRGen_ uniform;
156 return static_cast<value_type
>(uniform() * double(N));
163 typedef stxxl::uint64 value_type;
172 return static_cast<value_type
>(uniform() * (18446744073709551616.));
176 __STXXL_END_NAMESPACE
178 #endif // !STXXL_RAND_HEADER
value_type operator()() const
Returns a random number from [0, 2^32)
Definition: rand.h:76
Fast uniform [0, 2^32) pseudo-random generator with period 2^32, random bits: 32. ...
Definition: rand.h:41
Fast uniform [0, 2^32) pseudo-random generator with period 2^32, random bits: 32. Reentrant variant o...
Definition: rand.h:63
value_type operator()() const
Returns a random number from [0, 2^32)
Definition: rand.h:46
value_type operator()(value_type N) const
Returns a random number from [0, N)
Definition: rand.h:154
Uniform [0, N) pseudo-random generator.
Definition: rand.h:145
value_type operator()() const
Returns a random number from [0, 2^64)
Definition: rand.h:170
Slow and precise uniform [0, 2^64) pseudo-random generator.
Definition: rand.h:161