42 #include <../../nrnconf.h>
57 extern "C" double mcell_ran4(uint32_t* high,
double* x,
unsigned int n,
double range) {
59 for (
i = 0;
i <
n;
i++) {
83 idx = (uint32_t) (*xidx);
92 uint32_t idx = (uint32_t)
chkarg(1, 0., 4294967295.);
107 extern "C" uint32_t
nrnRan4int(uint32_t* idx1, uint32_t idx2) {
108 uint32_t u,
v, w, m,
n;
116 u = ~((
v - w) * (
v + w));
118 m ^= (((u >> 16) | (u << 16)) ^ 0x4b0f3b58) + w *
v;
123 u = ~((
v - w) * (
v + w));
125 n ^= (((u >> 16) | (u << 16)) ^ 0xe874f0c3) + w *
v;
131 u = (
v - w) * (
v + w);
132 m ^= (((u >> 16) | (u << 16)) ^ 0x96aa3a59) + w *
v;
137 u = (
v - w) * (
v + w);
138 n ^= (((u >> 16) | (u << 16)) ^ 0xaa5835b9) + w *
v;
161 static const double SHIFT32 = 1.0 / 4294967296.0;
162 extern "C" double nrnRan4dbl(uint32_t* idx1, uint32_t idx2) {
163 uint32_t hi, lo, extra;
170 return ((
double) hi) *
SHIFT32;
double * hoc_pgetarg(int narg)
uint32_t nrnRan4int(uint32_t *idx1, uint32_t idx2)
uint32_t mcell_iran4(uint32_t *high)
double nrnRan4dbl(uint32_t *idx1, uint32_t idx2)
double mcell_ran4a(uint32_t *high)
static const double SHIFT32
double mcell_ran4(uint32_t *high, double *x, unsigned int n, double range)
void mcell_ran4_init(uint32_t low)
int const size_t const size_t n