Banjo API 0.0.1
C99 game development API
Loading...
Searching...
No Matches
random.h
Go to the documentation of this file.
1
9
10#ifndef BJ_RANDOM_H
11#define BJ_RANDOM_H
12
13#include <banjo/api.h>
14#include <banjo/math.h>
15
23#define BJ_RAND_MAX 0x7FFF
24
29void bj_srand(unsigned int seed);
30
40int bj_rand(void);
41
46struct bj_pcg32_t {
47 uint64_t state;
48 uint64_t inc;
49};
50
51typedef struct bj_pcg32_t bj_pcg32;
52
60 bj_pcg32* generator,
61 uint64_t seed,
62 uint64_t seq
63);
64
71 bj_pcg32* generator
72);
73
80 bj_pcg32* generator,
81 uint64_t z
82);
83
88uint32_t bj_min_pcg32(void);
89
94uint32_t bj_max_pcg32(void);
95
105static inline uint32_t bj_pcg32_generator(void* state) {
106 return bj_next_pcg32((bj_pcg32*)state);
107}
108
115typedef uint32_t (*bj_random_u32_fn_t)(void* state);
116
127 void* state,
128 int32_t low,
129 int32_t high
130);
131
142 void* state,
143 float low,
144 float high
145);
146
157 void* state,
158 double low,
159 double high
160);
161
172 void* state,
173 long double low,
174 long double high
175);
176
186#if defined(BJ_API_LONG_DOUBLE)
187 #define bj_uniform_real_distribution bj_uniform_long_double_distribution
188#elif defined(BJ_API_FLOAT64)
189 #define bj_uniform_real_distribution bj_uniform_double_distribution
190#else
191 #define bj_uniform_real_distribution bj_uniform_float_distribution
192#endif
193
203 void* state,
204 bj_real probability
205);
206
217 void* state,
218 float mean,
219 float standard_deviation
220);
221
232 void* state,
233 double mean,
234 double standard_deviation
235);
236
247 void* state,
248 long double mean,
249 long double standard_deviation
250);
251
261#if defined(BJ_API_LONG_DOUBLE)
262 #define bj_normal_real_distribution bj_normal_long_double_distribution
263#elif defined(BJ_API_FLOAT64)
264 #define bj_normal_real_distribution bj_normal_double_distribution
265#else
266 #define bj_normal_real_distribution bj_normal_float_distribution
267#endif
268
269#endif /* BJ_RANDOM_H */
General-purpose definitions for Banjo API.
float bj_real
Selected real type for float configuration.
Definition math.h:51
uint64_t inc
Stream selector; odd recommended, 0 allowed.
Definition random.h:48
uint64_t state
Current internal state (updated each step).
Definition random.h:47
int32_t bj_uniform_int32_distribution(bj_random_u32_fn_t next, void *state, int32_t low, int32_t high)
Uniform 32-bit integer in [low, high].
uint32_t bj_min_pcg32(void)
Smallest possible value returned by the generator.
double bj_uniform_double_distribution(bj_random_u32_fn_t next, void *state, double low, double high)
Uniform double in [low, high).
double bj_normal_double_distribution(bj_random_u32_fn_t next, void *state, double mean, double standard_deviation)
Normal double N(mean, standard_deviation^2).
long double bj_uniform_long_double_distribution(bj_random_u32_fn_t next, void *state, long double low, long double high)
Uniform long double in [low, high).
static uint32_t bj_pcg32_generator(void *state)
Adapter for distribution API (void* state).
Definition random.h:105
int bj_bernoulli_distribution(bj_random_u32_fn_t next, void *state, bj_real probability)
Bernoulli(probability).
float bj_uniform_float_distribution(bj_random_u32_fn_t next, void *state, float low, float high)
Uniform float in [low, high).
struct bj_pcg32_t bj_pcg32
Alias for bj_pcg32_t.
Definition random.h:51
uint32_t bj_next_pcg32(bj_pcg32 *generator)
Advance the generator and return the next 32-bit value.
void bj_discard_pcg32(bj_pcg32 *generator, uint64_t z)
Advance the generator state by z steps.
uint32_t bj_max_pcg32(void)
Largest possible value returned by the generator.
float bj_normal_float_distribution(bj_random_u32_fn_t next, void *state, float mean, float standard_deviation)
Normal float N(mean, standard_deviation^2).
void bj_srand(unsigned int seed)
Seed the standard PRNG.
void bj_seed_pcg32(bj_pcg32 *generator, uint64_t seed, uint64_t seq)
Set the generator state from seed and sequence.
int bj_rand(void)
Generate a pseudo-random integer in [0, BJ_RAND_MAX].
long double bj_normal_long_double_distribution(bj_random_u32_fn_t next, void *state, long double mean, long double standard_deviation)
Normal long double N(mean, standard_deviation^2).
uint32_t(* bj_random_u32_fn_t)(void *state)
RNG callback type for generator-agnostic distributions.
Definition random.h:115
PCG32 generator state.
Definition random.h:46
C99 math shim with bj_real precision type and scalar utilities.