Project Alice
Loading...
Searching...
No Matches
gsl_microrng.h File Reference
#include <gsl/gsl_rng.h>
#include <string.h>
Include dependency graph for gsl_microrng.h:

Go to the source code of this file.

Macros

#define GSL_MICRORNG(NAME, CBRNGNAME)
 

Macro Definition Documentation

◆ GSL_MICRORNG

#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);
}
}
}
int main(int argc, char *argv[])
#define GSL_MICRORNG(NAME, CBRNGNAME)
Definition: gsl_microrng.h:78
#define threefry4x64(c, k)

Definition at line 78 of file gsl_microrng.h.