prng: fix rand() to give good sequence with small state
[musl] / src / prng / __rand48_step.c
1 #include <stdlib.h>
2 #include <inttypes.h>
3
4 uint64_t __rand48_step(unsigned short *xi, unsigned short *lc)
5 {
6         uint64_t a, x;
7         x = xi[0] | xi[1]<<16 | xi[2]+0ULL<<32;
8         a = lc[0] | lc[1]<<16 | lc[2]+0ULL<<32;
9         x = a*x + lc[3];
10         xi[0] = x;
11         xi[1] = x>>16;
12         xi[2] = x>>32;
13         return x & 0xffffffffffffull;
14 }