5 #include <Random123/philox.h>
7 using RNG = r123::Philox4x32;
9 static RNG::key_type
k = {{0}};
33 static std::uint32_t id3{};
56 if (which > 3 || which < 0) {
62 s->r = philox4x32(
s->c,
k);
69 if (seq4which < 0.0) {
72 if (seq4which >
double(0XffffffffffLL)) {
76 unsigned long long x = ((
unsigned long long) seq4which) & 0X3ffffffffLL;
78 uint32_t seq = x >> 2;
100 std::uint32_t* id3) {
111 char which =
s->which_;
112 std::uint32_t rval =
s->r[which++];
116 s->r = philox4x32(
s->c,
k);
123 static const double SHIFT32 = 1.0 / 4294967297.0;
125 return ((
double) u + 1.0) *
SHIFT32;
156 w = (u1 * u1) + (u2 * u2);
181 RNG::ctr_type r = philox4x32(
c,
k);
double nrnran123_normal(nrnran123_State *s)
double nrnran123_uniform(nrnran123_State *s)
void nrnran123_getids(nrnran123_State *s, std::uint32_t *id1, std::uint32_t *id2)
Get stream IDs from Random123 State object.
void nrnran123_set_globalindex(std::uint32_t gix)
double nrnran123_negexp(nrnran123_State *s, double mean)
std::uint32_t nrnran123_get_globalindex()
nrnran123_array4x32 nrnran123_iran(std::uint32_t seq, std::uint32_t id1, std::uint32_t id2)
std::uint32_t nrnran123_ipick(nrnran123_State *s)
nrnran123_array4x32 nrnran123_iran3(std::uint32_t seq, std::uint32_t id1, std::uint32_t id2, std::uint32_t id3)
nrnran123_State * nrnran123_newstream()
Construct a new Random123 stream based on the philox4x32 generator.
void nrnran123_deletestream(nrnran123_State *s)
Destroys the given Random123 stream.
void nrnran123_getids3(nrnran123_State *s, std::uint32_t *id1, std::uint32_t *id2, std::uint32_t *id3)
double nrnran123_dblpick(nrnran123_State *s)
void nrnran123_setseq(nrnran123_State *s, std::uint32_t seq, char which)
Set a Random123 sequence for a sequnece ID and which selector.
nrnran123_State * nrnran123_newstream3(std::uint32_t id1, std::uint32_t id2, std::uint32_t id3)
void nrnran123_setids(nrnran123_State *s, std::uint32_t id1, std::uint32_t id2, std::uint32_t id3)
void nrnran123_getseq(nrnran123_State *s, std::uint32_t *seq, char *which)
Get sequence number and selector from an nrnran123_State object.
static const double SHIFT32