/*
OOK, the Only OK generator
This generator is very small, and very fast,
but the low order bits aren't all that great.
It's main purpose is to provide a test vector
for Diehard C.
I do not recommend using this generator.
*/
#define ulong unsigned long
static ulong ook_state1 = 1;
static ulong ook_state2 = 2;
void seedrand_ook(ulong seed) {
ook_state1 = seed | 1;
ook_state2 = seed | 2;
}
ulong rand_ook(void) {
if (ook_state1&1) {
ook_state1 = (ook_state1>>1) ^ 0xEDB88320l;
} else {
ook_state1 = (ook_state1>>1);
}
ook_state2 = (ook_state2 * 69069 + 17) & 0xffffffff;
return ook_state1 ^ ook_state2;
}