initial commit
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ie3b66d17f6f660c9b9a719210bd86f9f6a6a6964
This commit is contained in:
commit
b381e2efbd
29 changed files with 1633 additions and 0 deletions
22
src/rng.c
Normal file
22
src/rng.c
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#include "rng.h"
|
||||
|
||||
// Linear congruential generator (LCG) state
|
||||
static unsigned int g_seed = 1;
|
||||
|
||||
// LCG parameters (from numerical recipes)
|
||||
#define LCG_A 1664525
|
||||
#define LCG_C 1013904223
|
||||
#define LCG_MOD 4294967294 // 2^32 - 2 (avoid 0)
|
||||
|
||||
void rng_seed(unsigned int seed) {
|
||||
// Ensure seed is never 0
|
||||
g_seed = (seed == 0) ? 1 : seed;
|
||||
}
|
||||
|
||||
int rng_int(int min, int max) {
|
||||
// Generate next value
|
||||
g_seed = (LCG_A * g_seed + LCG_C) % LCG_MOD;
|
||||
|
||||
// Map to [min, max] range
|
||||
return min + (int)((unsigned long long)g_seed % (max - min + 1));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue