CORSIKA  @c8_version@
The framework to simulate particle cascades for astroparticle physics
random_iterator_r123::MicroURNG< CBRNG > Class Template Reference

Given a CBRNG whose ctr_type has an unsigned integral value_type, MicroURNG<CBRNG>(c, k) is a type that satisfies the requirements of a C++11 Uniform Random Number Generator. More...

#include <MicroURNG.hpp>

Public Types

typedef CBRNG cbrng_type
 
typedef cbrng_type::ctr_type ctr_type
 
typedef cbrng_type::key_type key_type
 
typedef cbrng_type::ukey_type ukey_type
 
typedef ctr_type::value_type result_type
 

Public Member Functions

 RANDOM_ITERATOR_R123_STATIC_ASSERT (std::numeric_limits< result_type >::digits >=BITS, "The result_type must have at least 32 bits")
 
result_type operator() ()
 
 MicroURNG (cbrng_type _b, ctr_type _c0, ukey_type _uk)
 
 MicroURNG (ctr_type _c0, ukey_type _uk)
 
const ctr_type & counter () const
 
void reset (ctr_type _c0, ukey_type _uk)
 

Static Public Attributes

static const int BITS = 32
 
static const result_type _Min = 0
 
static const result_type _Max = ~((result_type)0)
 

Detailed Description

template<typename CBRNG>
class random_iterator_r123::MicroURNG< CBRNG >

Given a CBRNG whose ctr_type has an unsigned integral value_type, MicroURNG<CBRNG>(c, k) is a type that satisfies the requirements of a C++11 Uniform Random Number Generator.

The intended purpose is for a MicroURNG to be passed as an argument to a C++11 Distribution, e.g., std::normal_distribution. See examples/MicroURNG.cpp.

The MicroURNG functor has a period of "only"

ctr_type.size()*2^32,

after which it will silently repeat.

The high 32 bits of the highest word in the counter c, passed to the constructor must be zero. MicroURNG uses these bits to "count".

Older versions of the library permitted a second template parameter by which the caller could control the number of bits devoted to the URNG's internal counter. This flexibility has been disabled because URNGs created with different numbers of counter bits could, conceivably "collide".

typedef ?someCBRNG? RNG;
RNG::ctr_type c = ...; // under application control
RNG::key_type k = ...; //
std::normal_distribution<float> nd;
MicroURNG<RNG> urng(c, k);
for(???){
...
nd(urng); // may be called several hundred times with BITS=10
...
}

Definition at line 79 of file MicroURNG.hpp.


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