Files
Iris/iris_c/random.c
2026-02-12 14:49:54 +01:00

31 lines
569 B
C

#include "random.h"
static uint32_t state = 1;
void set_random_seed(uint32_t seed) {
state = seed ? seed : 1;
}
uint32_t random_u32(void) {
state ^= state << 13;
state ^= state >> 17;
state ^= state << 5;
return state;
}
uint32_t random_range(uint32_t max) {
if (max == 0) return 0;
uint32_t threshold = (0xFFFFFFFFU / max) * max;
uint32_t r;
do {
r = random_u32();
} while (r >= threshold);
return r % max;
}
void advance_state(uint32_t n) {
for (uint32_t i = 0; i < n; i++) {
random_u32();
}
}