Banjo API 1.0.0-rc.2
Low-level C99 game development API
Loading...
Searching...
No Matches
random.h
Go to the documentation of this file.
1
77
78#ifndef BJ_RANDOM_H
79#define BJ_RANDOM_H
80
81#include <banjo/api.h>
82#include <banjo/math.h>
83
91#define BJ_RAND_MAX 0x7FFF
92
97void bj_srand(unsigned int seed);
98
108int bj_rand(void);
109
114struct bj_pcg32 {
115 uint64_t state;
116 uint64_t inc;
117};
118
119struct bj_pcg32;
120
128 struct bj_pcg32* generator,
129 uint64_t seed,
130 uint64_t seq
131);
132
139 struct bj_pcg32* generator
140);
141
148 struct bj_pcg32* generator,
149 uint64_t z
150);
151
156uint32_t bj_min_pcg32(void);
157
162uint32_t bj_max_pcg32(void);
163
173static BJ_INLINE uint32_t bj_pcg32_generator(void* state) {
174 return bj_next_pcg32((struct bj_pcg32*)state);
175}
176
183typedef uint32_t (*bj_random_u32_fn)(void* state);
184
194 bj_random_u32_fn next,
195 void* state,
196 int32_t low,
197 int32_t high
198);
199
209 bj_random_u32_fn next,
210 void* state,
211 float low,
212 float high
213);
214
224 bj_random_u32_fn next,
225 void* state,
226 double low,
227 double high
228);
229
239 bj_random_u32_fn next,
240 void* state,
241 long double low,
242 long double high
243);
244
254#if defined(BJ_API_LONG_DOUBLE)
255 #define bj_uniform_real_distribution bj_uniform_long_double_distribution
256#elif defined(BJ_API_FLOAT64)
257 #define bj_uniform_real_distribution bj_uniform_double_distribution
258#else
259 #define bj_uniform_real_distribution bj_uniform_float_distribution
260#endif
261
270 bj_random_u32_fn next,
271 void* state,
272 bj_real probability
273);
274
284 bj_random_u32_fn next,
285 void* state,
286 float mean,
287 float standard_deviation
288);
289
299 bj_random_u32_fn next,
300 void* state,
301 double mean,
302 double standard_deviation
303);
304
314 bj_random_u32_fn next,
315 void* state,
316 long double mean,
317 long double standard_deviation
318);
319
329#if defined(BJ_API_LONG_DOUBLE)
330 #define bj_normal_real_distribution bj_normal_long_double_distribution
331#elif defined(BJ_API_FLOAT64)
332 #define bj_normal_real_distribution bj_normal_double_distribution
333#else
334 #define bj_normal_real_distribution bj_normal_float_distribution
335#endif
336
337#endif /* BJ_RANDOM_H */
338
352 bj_random_u32_fn next,
353 void* state,
354 float min,
355 float max
356);
357
371 bj_random_u32_fn next,
372 void* state,
373 double min,
374 double max
375);
376
390 bj_random_u32_fn next,
391 void* state,
392 long double min,
393 long double max
394);
395
405#if defined(BJ_API_LONG_DOUBLE)
406 #define bj_normal_real_minmax_distribution bj_normal_long_double_minmax_distribution
407#elif defined(BJ_API_FLOAT64)
408 #define bj_normal_real_minmax_distribution bj_normal_double_minmax_distribution
409#else
410 #define bj_normal_real_minmax_distribution bj_normal_float_minmax_distribution
411#endif
General-purpose definitions for Banjo API.
#define BANJO_EXPORT
Definition api.h:163
#define BJ_INLINE
BJ_INLINE expands to an inline specifier appropriate for the toolchain.
Definition api.h:241
float bj_real
Selected real type for float configuration.
Definition math.h:76
uint64_t inc
Stream selector; odd recommended, 0 allowed.
Definition random.h:116
uint64_t state
Current internal state (updated each step).
Definition random.h:115
void bj_seed_pcg32(struct bj_pcg32 *generator, uint64_t seed, uint64_t seq)
Set the generator state from seed and sequence.
uint32_t bj_min_pcg32(void)
Smallest possible value returned by the generator.
long double bj_normal_long_double_minmax_distribution(bj_random_u32_fn next, void *state, long double min, long double max)
Normal from min/max convenience (μ ≈ (min+max)/2, σ ≈ (max-min)/6).
double bj_normal_double_distribution(bj_random_u32_fn next, void *state, double mean, double standard_deviation)
Normal double N(mean, standard_deviation^2).
double bj_normal_double_minmax_distribution(bj_random_u32_fn next, void *state, double min, double max)
Normal from min/max convenience (μ ≈ (min+max)/2, σ ≈ (max-min)/6).
static uint32_t bj_pcg32_generator(void *state)
Adapter for distribution API (void* state).
Definition random.h:173
float bj_normal_float_minmax_distribution(bj_random_u32_fn next, void *state, float min, float max)
Normal from min/max convenience (μ ≈ (min+max)/2, σ ≈ (max-min)/6).
int32_t bj_uniform_int32_distribution(bj_random_u32_fn next, void *state, int32_t low, int32_t high)
Uniform 32-bit integer in [low, high].
long double bj_uniform_long_double_distribution(bj_random_u32_fn next, void *state, long double low, long double high)
Uniform long double in [low, high).
int bj_bernoulli_distribution(bj_random_u32_fn next, void *state, bj_real probability)
Bernoulli(probability).
void bj_discard_pcg32(struct bj_pcg32 *generator, uint64_t z)
Advance the generator state by z steps.
float bj_normal_float_distribution(bj_random_u32_fn next, void *state, float mean, float standard_deviation)
Normal float N(mean, standard_deviation^2).
float bj_uniform_float_distribution(bj_random_u32_fn next, void *state, float low, float high)
Uniform float in [low, high).
uint32_t bj_max_pcg32(void)
Largest possible value returned by the generator.
long double bj_normal_long_double_distribution(bj_random_u32_fn next, void *state, long double mean, long double standard_deviation)
Normal long double N(mean, standard_deviation^2).
void bj_srand(unsigned int seed)
Seed the standard PRNG.
double bj_uniform_double_distribution(bj_random_u32_fn next, void *state, double low, double high)
Uniform double in [low, high).
int bj_rand(void)
Generate a pseudo-random integer in [0, BJ_RAND_MAX].
uint32_t bj_next_pcg32(struct bj_pcg32 *generator)
Advance the generator and return the next 32-bit value.
uint32_t(* bj_random_u32_fn)(void *state)
RNG callback type for generator-agnostic distributions.
Definition random.h:183
PCG32 generator state.
Definition random.h:114
C99 math shim with bj_real precision type and scalar utilities.