STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Private Member Functions | Private Attributes | List of all members
__gnu_parallel::_RandomNumber Class Reference

Random number generator, based on the Mersenne twister. More...

#include <parallel/random_number.h>

Public Member Functions

 _RandomNumber ()
 Default constructor. Seed with 0. More...
 
 _RandomNumber (uint32_t __seed, uint64_t _M_supremum=0x100000000ULL)
 Constructor. More...
 
uint32_t operator() ()
 Generate unsigned random 32-bit integer. More...
 
uint32_t operator() (uint64_t local_supremum)
 Generate unsigned random 32-bit integer in the interval [0,local_supremum). More...
 
unsigned long __genrand_bits (int __bits)
 Generate a number of random bits, run-time parameter. More...
 

Static Private Member Functions

static uint32_t __scale_down (uint64_t __x, uint64_t _M_supremum, double)
 

Private Attributes

std::tr1::mt19937 _M_mt
 
uint64_t _M_supremum
 
uint64_t _M_rand_sup
 
double _M_supremum_reciprocal
 
double _M_rand_sup_reciprocal
 
uint64_t __cache
 
int __bits_left
 

Detailed Description

Random number generator, based on the Mersenne twister.

Constructor & Destructor Documentation

__gnu_parallel::_RandomNumber::_RandomNumber ( )
inline

Default constructor. Seed with 0.

75  : _M_mt(0), _M_supremum(0x100000000ULL),
76  _M_rand_sup(1ULL << std::numeric_limits<uint32_t>::digits),
78  _M_rand_sup_reciprocal(1.0 / double(_M_rand_sup)),
79  __cache(0), __bits_left(0) { }
int __bits_left
Definition: random_number.h:55
uint64_t __cache
Definition: random_number.h:52
double _M_rand_sup_reciprocal
Definition: random_number.h:49
uint64_t _M_rand_sup
Definition: random_number.h:47
std::tr1::mt19937 _M_mt
Definition: random_number.h:45
uint64_t _M_supremum
Definition: random_number.h:46
double _M_supremum_reciprocal
Definition: random_number.h:48
__gnu_parallel::_RandomNumber::_RandomNumber ( uint32_t  __seed,
uint64_t  _M_supremum = 0x100000000ULL 
)
inline

Constructor.

Parameters
__seedRandom __seed.
_M_supremumGenerate integer random numbers in the interval [0,_M_supremum).
86  : _M_mt(__seed), _M_supremum(_M_supremum),
87  _M_rand_sup(1ULL << std::numeric_limits<uint32_t>::digits),
89  _M_rand_sup_reciprocal(1.0 / double(_M_rand_sup)),
90  __cache(0), __bits_left(0) { }
int __bits_left
Definition: random_number.h:55
uint64_t __cache
Definition: random_number.h:52
double _M_rand_sup_reciprocal
Definition: random_number.h:49
uint64_t _M_rand_sup
Definition: random_number.h:47
std::tr1::mt19937 _M_mt
Definition: random_number.h:45
uint64_t _M_supremum
Definition: random_number.h:46
double _M_supremum_reciprocal
Definition: random_number.h:48

Member Function Documentation

unsigned long __gnu_parallel::_RandomNumber::__genrand_bits ( int  __bits)
inline

Generate a number of random bits, run-time parameter.

Parameters
__bitsNumber of bits to generate.
110  {
111  unsigned long __res = __cache & ((1 << __bits) - 1);
112  __cache = __cache >> __bits;
113  __bits_left -= __bits;
114  if (__bits_left < 32)
115  {
116  __cache |= ((uint64_t(_M_mt())) << __bits_left);
117  __bits_left += 32;
118  }
119  return __res;
120  }
int __bits_left
Definition: random_number.h:55
uint64_t __cache
Definition: random_number.h:52
std::tr1::mt19937 _M_mt
Definition: random_number.h:45
static uint32_t __gnu_parallel::_RandomNumber::__scale_down ( uint64_t  __x,
uint64_t  _M_supremum,
double   
)
inlinestaticprivate
64  {
65 #if _GLIBCXX_SCALE_DOWN_FPU
66  return uint32_t(__x * _M_supremum_reciprocal);
67 #else
68  return static_cast<uint32_t>(__x % _M_supremum);
69 #endif
70  }
uint64_t _M_supremum
Definition: random_number.h:46
double _M_supremum_reciprocal
Definition: random_number.h:48
uint32_t __gnu_parallel::_RandomNumber::operator() ( )
inline

Generate unsigned random 32-bit integer.

static uint32_t __scale_down(uint64_t __x, uint64_t _M_supremum, double)
Definition: random_number.h:58
std::tr1::mt19937 _M_mt
Definition: random_number.h:45
uint64_t _M_supremum
Definition: random_number.h:46
double _M_supremum_reciprocal
Definition: random_number.h:48
uint32_t __gnu_parallel::_RandomNumber::operator() ( uint64_t  local_supremum)
inline

Generate unsigned random 32-bit integer in the interval [0,local_supremum).

101  {
102  return __scale_down(_M_mt(), local_supremum,
103  double(local_supremum * _M_rand_sup_reciprocal));
104  }
static uint32_t __scale_down(uint64_t __x, uint64_t _M_supremum, double)
Definition: random_number.h:58
double _M_rand_sup_reciprocal
Definition: random_number.h:49
std::tr1::mt19937 _M_mt
Definition: random_number.h:45

Member Data Documentation

int __gnu_parallel::_RandomNumber::__bits_left
private
uint64_t __gnu_parallel::_RandomNumber::__cache
private
std::tr1::mt19937 __gnu_parallel::_RandomNumber::_M_mt
private
uint64_t __gnu_parallel::_RandomNumber::_M_rand_sup
private
double __gnu_parallel::_RandomNumber::_M_rand_sup_reciprocal
private
uint64_t __gnu_parallel::_RandomNumber::_M_supremum
private
double __gnu_parallel::_RandomNumber::_M_supremum_reciprocal
private

The documentation for this class was generated from the following file: