]> git.bts.cx Git - benzene.git/blob - src/bz/math/random.c
Initial version
[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 }