elf/lib/random.c

21 lines
346 B
C

#include <random.h>
#include <sys.h>
RandGen randinit();
int64_t randnext(RandGen *g);
RandGen randinit() {
RandGen g;
g.seed = utime();
return g;
}
int64_t randnext(RandGen *g) {
int64_t ret = g->seed;
ret = 0x5DEECE66D * ret + 0xB;
ret &= 0xffffffffffff;
g->seed = ret;
ret = ret ^ (ret >> 16) ^ (ret >> 32);
return ret;
}