#include "prand.h" #include #include #include #define BUILD_SEED \ ((uint64_t)(__TIME__[0]) * (uint64_t)(__TIME__[1]) * \ (uint64_t)(__TIME__[3]) * (uint64_t)(__TIME__[4]) * \ (uint64_t)(__TIME__[6]) * (uint64_t)(__TIME__[7])) #define PRNG_SAVE_INTERVAL 50 // Save every 1000 calls to prand() static uint64_t seed = BUILD_SEED; uint64_t prand() { seed = seed * 6364136223846793005ULL + 1; return seed; } inline uint64_t prand_range(uint64_t min, uint64_t max) { return min + (prand() % (max - min + 1)); } void sprand(uint64_t s) { if (s) { seed = s; } else { rand_reseed(); } } void rand_reseed() { seed = BUILD_SEED; } #define PRAND_MAIN #ifdef PRAND_MAIN int main() { // time(NULL) provides a somewhat unique seed at runtime sprand(time(NULL)); uint64_t rn1 = prand(); uint64_t rn2 = prand(); printf("rn1 = %lu\n", rn1); printf("rn2 = %lu\n", rn2); } #endif