### A fast random number generator in C

If you are using RNGs (Random Number Generators) for cryptography then you need one that has been validated for sufficient randomness. For example the libsodium library.

But if you want a fast one for general purpose use, then xoshiro256++ is a fast one.  It’s actually that short that I can list it here. Just call next() and mod it (%) with the highest value+1. E.G. for a dice roll,

``````int diceroll= (next() %6) +1;
``````

This algorithm is very fast, typically on the order of nano-seconds 10-9 seconds.

``````#include <stdint.h>
uint64_t rngstate[4];

static inline uint64_t rotl(const uint64_t x, int k) {
return (x << k) | (x >> (64 - k));
}

// Returns a Uint64 random number
uint64_t next(void) {
const uint64_t result = rotl(rngstate[0] + rngstate[3], 23) + rngstate[0];
const uint64_t t = rngstate[1] << 17;
rngstate[2] ^= rngstate[0];
rngstate[3] ^= rngstate[1];
rngstate[1] ^= rngstate[2];
rngstate[0] ^= rngstate[3];
rngstate[2] ^= t;
rngstate[3] = rotl(rngstate[3], 45);
return result;
}``````
(Visited 623 times, 1 visits today)