diff options
Diffstat (limited to 'src/prng/rand_r.c')
-rw-r--r-- | src/prng/rand_r.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/prng/rand_r.c b/src/prng/rand_r.c index ef26dbde..638614c8 100644 --- a/src/prng/rand_r.c +++ b/src/prng/rand_r.c @@ -1,6 +1,15 @@ #include <stdlib.h> +static unsigned temper(unsigned x) +{ + x ^= x>>11; + x ^= x<<7 & 0x9D2C5680; + x ^= x<<15 & 0xEFC60000; + x ^= x>>18; + return x; +} + int rand_r(unsigned *seed) { - return (*seed = *seed * 1103515245 + 12345)/2; + return temper(*seed = *seed * 1103515245 + 12345)/2; } |