#include <gsl/gsl_rng.h>
#include <string.h>
Go to the source code of this file.
Defines | |
#define | GSL_MICRORNG(NAME, CBRNGNAME) |
#define GSL_MICRORNG | ( | NAME, | ||
CBRNGNAME | ||||
) |
The macro: GSL_MICRORNG(NAME, CBRNGNAME) is the GSL analog analog of the C++ r123::MicroURNG template. It declares a gsl_rng type named gsl_rng_NAME which uses the underlying CBRNGNAME and can be invoked a limited number of times between calls to NAME_reset.
When the underlying CBRNG's ctr_t
is an r123arrayNxW, and the gsl_rng_NAME may called up to N*2^32
times between calls to NAME_reset
.
NAME_reset
takes a gsl_rng_NAME type, a counter and a key as arguments. It restarts the micro-rng with a new base counter and key.
Note that you must call NAME_reset before the first use of a gsl_rng. NAME_reset is not called automatically by gsl_rng_alloc().
#include <Random123/threefry.h> #include <Random123/gsl_microrng.h> // this file GSL_MICRORNG(microcbrng, threefry4x64, 20) // creates gsl_rng_microcbrng int main(int argc, char** argv) { gsl_rng *r = gsl_rng_alloc(gsl_rng_microcbrng); threefry4x64_ctr_t c = {{}}; threefry4x64_key_t k = {{}}; for (...) { c.v[0] = ??; // some application variable microcbrng_reset(r, c, k); for (...) { // gaussian calls r several times. It is safe for // r to be used upto 2^20 times in this loop something[i] = gsl_ran_gaussian(r, 1.5); } } }