Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
18 lines (15 sloc) 461 Bytes
#include "random.h"
void random_seed(random_state_t *r, u32 seed) {
r->z = 12345;
r->w = seed;
}
/*
* MWC generator concatenates two 16-bit multiply-
* with-carry generators, x(n)=36969x(n-1)+carry,
* y(n)=18000y(n-1)+carry mod 2^16, has period about 2^60
*/
u32 random_next(random_state_t *r) {
r->z = 36969 * (r->z & 65535) + (r->z >> 16);
r->w = 18000 * (r->w & 65535) + (r->w >> 16);
return ((r->z << 16) + r->w) & 0x7FFFFFFF;
}