snapkitty
machine-learning
c
File size: 1,429 Bytes
8b41169
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* sk_random.h β€” SnapKitty MLC: PCG32 pseudo-random number generator
 *
 * Algorithm: PCG-XSH-RR (O'Neill 2014). Period 2^64.
 * Stateless reentrant API (_r suffix) + global convenience wrappers.
 *
 * Authors: Ahmad Ali Parr, Jessica L. Williams (SNAPKITTYWEST)
 * Source:  SNAPKITTYAGENT9NOVA/MLC
 * License: BSL-1.1 / AGPL-3.0 / MPL-2.0
 */
#ifndef SK_RANDOM_H
#define SK_RANDOM_H

#include "sk_defs.h"

typedef struct {
    u64 state;
    u64 inc;
} sk_prng;

/* ── Seeding ──────────────────────────────────────────────────────── */
void sk_prng_seed_r(sk_prng* rng, u64 initstate, u64 initseq);
void sk_prng_seed(u64 initstate, u64 initseq);

/* ── Generation ───────────────────────────────────────────────────── */
u32  sk_prng_rand_r(sk_prng* rng);
u32  sk_prng_rand(void);

f32  sk_prng_randf_r(sk_prng* rng);  /* [0, 1) */
f32  sk_prng_randf(void);            /* [0, 1) */

/* Compatibility aliases */
#define prng_state      sk_prng
#define prng_seed_r     sk_prng_seed_r
#define prng_seed       sk_prng_seed
#define prng_rand_r     sk_prng_rand_r
#define prng_rand       sk_prng_rand
#define prng_randf_r    sk_prng_randf_r
#define prng_randf      sk_prng_randf

#endif /* SK_RANDOM_H */