]> git.bts.cx Git - benzene.git/blob - src/bz/math/random.c
Sprites
[benzene.git] / src / bz / math / random.c
1 #include <bz/math/random.h>
2
3 #include <bz/math/math.h>
4 #include <pcg_basic.h>
5 #include <stdarg.h>
6
7 float bzRandomFloat(float max) {
8         uint32_t v = pcg32_random() % 1000;
9         float value = (float)v / 1000.0f;
10         return value * max;
11         //return ((float)pcg32_random() / (float)UINTMAX_MAX);// * max;
12 }
13
14 float bzRandomFloatRange(float v1, float v2) {
15         if (v1 == v2) {
16                 return v1;
17         } else {
18                 float min = bzMin(v1, v2);
19                 float max = bzMax(v1, v2);
20                 float v = bzRandomFloat(bzAbs(max - min)) * bzSgn(max - min);
21                 return min + v;
22         }
23 }
24
25 uint32_t bzRandomInteger(uint32_t max) {
26         return pcg32_boundedrand(max);
27 }
28
29 int32_t bzRandomIntegerRange(int32_t v1, int32_t v2) {
30         if (v1 == v2) {
31                 return v1;
32         } else {
33                 int32_t min = bzMin(v1, v2);
34                 int32_t max = bzMax(v1, v2);
35                 int32_t v = bzRandomInteger(bzAbs(max - min)) * bzSgn(max - min);
36                 return min + v;
37         }
38 }
39
40 void *bzRandomArrayValue(size_t count, size_t arrayTypeSize, void *array) {
41         uint32_t idx = bzRandomInteger(count);
42         return array + idx * arrayTypeSize;
43 }