19 #if defined(HAVE_STDINT_H)
24 #define RANDSIZ (1 << RANDSIZL)
25 #define RANDMAX (2 * RANDSIZ)
27 typedef unsigned long long ub8;
31 typedef unsigned int ub4;
33 typedef unsigned short int ub2;
34 typedef unsigned char ub1;
36 #define DBL32 (2.3283064365386962890625e-10)
37 #define DBL53 (1.1102230246251565404236316680908203125e-16)
38 #define DBL64 (5.42101086242752217003726400434970855712890625e-20)
39 #define MSK53 0x001FFFFFFFFFFFFFLL
61 #define isaac64_uint32(rng) \
62 (rng->randcnt > 0 ? (*(((ub4*) (rng->randrsl)) + (rng->randcnt -= 1))) \
63 : (isaac64_generate(rng), \
64 rng->randcnt = RANDMAX - 1, \
65 *(((ub4*) (rng->randrsl)) + rng->randcnt)))
67 #define isaac64_uint64(rng) \
68 (rng->randcnt > 1 ? (*((ub8*) (((ub4*) (rng->randrsl)) + (rng->randcnt -= 2)))) \
69 : (isaac64_generate(rng), \
70 rng->randcnt = RANDMAX - 2, \
71 *((ub8*) (((ub4*) (rng->randrsl)) + rng->randcnt))))
73 #define isaac64_dbl32(rng) \
74 (rng->randcnt > 0 ? (DBL32 * (*(((ub4*) (rng->randrsl)) + (rng->randcnt -= 1)))) \
75 : (isaac64_generate(rng), \
76 rng->randcnt = RANDMAX - 1, \
77 DBL32 * (*(((ub4*) (rng->randrsl)) + rng->randcnt))))
79 #define isaac64_dbl53(rng) \
81 ? (DBL53 * ((*((ub8*) (((ub4*) (rng->randrsl)) + (rng->randcnt -= 2)))) >> 11)) \
82 : (isaac64_generate(rng), \
83 rng->randcnt = RANDMAX - 2, \
84 DBL64 * ((*((ub8*) (((ub4*) (rng->randrsl)) + rng->randcnt))) >> 11)))
86 #define isaac64_dbl64(rng) \
87 (rng->randcnt > 1 ? (DBL64 * (*((ub8*) (((ub4*) (rng->randrsl)) + (rng->randcnt -= 2))))) \
88 : (isaac64_generate(rng), \
89 rng->randcnt = RANDMAX - 2, \
90 DBL64 * (*((ub8*) (((ub4*) (rng->randrsl)) + rng->randcnt)))))
void isaac64_generate(struct isaac64_state *rng)
void isaac64_init(struct isaac64_state *rng, ub4 seed)