diff options
author | Nicholas Noll <nbnoll@eml.cc> | 2021-11-11 16:31:58 -0800 |
---|---|---|
committer | Nicholas Noll <nbnoll@eml.cc> | 2021-11-11 16:31:58 -0800 |
commit | 9695ea005d4af93dcd60f74f10fd3c54499a182f (patch) | |
tree | 3e1a9abb9456ba07c0c97cd3d691f6a2df115791 /sys/base/rng/random.c | |
parent | c65794b50b1bc729e7a4e940b76a973afa3030b9 (diff) |
chore: split up base library into individual files for smaller binaries
Diffstat (limited to 'sys/base/rng/random.c')
-rw-r--r-- | sys/base/rng/random.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/sys/base/rng/random.c b/sys/base/rng/random.c new file mode 100644 index 0000000..bd1bd6b --- /dev/null +++ b/sys/base/rng/random.c @@ -0,0 +1,33 @@ +#include "internal.h" + +static uint64 +xoshiro256ss(Rng *state) +{ + uint64 *s = state->s; + uint64 result = rol64(s[1] * 5, 7) * 9; + uint64 t = s[1] << 17; + + s[2] ^= s[0]; + s[3] ^= s[1]; + s[1] ^= s[2]; + s[0] ^= s[3]; + + s[2] ^= t; + s[3] = rol64(s[3], 45); + + return result; +} + +double +rng·random(void) +{ + uint64 r = xoshiro256ss(&rng·RNG); + return (double)r / (double)UINT64_MAX; +} + +uint64 +rng·randi(int max) +{ + uint64 r = xoshiro256ss(&rng·RNG); + return r % max; +} |