-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrand_range.c
93 lines (86 loc) · 7.61 KB
/
rand_range.c
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "rand_range.h"
#include <math.h>
#define RAND_MAX 32767
#define NUMBERS_COUNT 1024
// These numbers are truly random
unsigned int RANDOM_NUMBERS[NUMBERS_COUNT] = {
20702, 17280, 1320, 1203, 2303, 21170, 15630, 13006, 30005, 32003, 20261, 29292, 27407, 17666, 5618, 2380,
25172, 15266, 21523, 11075, 4667, 20353, 24371, 31114, 1097, 2336, 4725, 14455, 31334, 26673, 21688, 9311,
20206, 27333, 209, 15918, 115, 20526, 17536, 21786, 17801, 11470, 15900, 2334, 16009, 19820, 2005, 23779,
4257, 13667, 30395, 24020, 20215, 22135, 16708, 754, 5102, 26526, 21069, 14252, 67, 11367, 31790, 21997,
3003, 8026, 29486, 32732, 10161, 31062, 7424, 1492, 3234, 9910, 22546, 27455, 28617, 32180, 31939, 29366,
27228, 24096, 5494, 28508, 31299, 24268, 12180, 5042, 11663, 1442, 4840, 7987, 26923, 19939, 19284, 5885,
27373, 5383, 26073, 23777, 5480, 5803, 12817, 22216, 2602, 7607, 1861, 8955, 976, 9645, 19650, 12189,
30448, 993, 23041, 25163, 9817, 1844, 32626, 30211, 6939, 32535, 1629, 28586, 22497, 29123, 5304, 24886,
4288, 6101, 10916, 28869, 20568, 8949, 6811, 31738, 9615, 12138, 7135, 17510, 29395, 4433, 27216, 23125,
3753, 6043, 10382, 5988, 2590, 26368, 11227, 4583, 5212, 25773, 20442, 1919, 10553, 735, 12500, 21518,
10392, 24152, 30124, 6348, 23195, 10620, 5487, 9730, 22892, 26765, 19778, 13385, 11098, 10154, 9138, 12000,
1444, 27678, 7670, 18090, 5261, 21835, 19627, 31871, 28809, 16344, 12816, 31342, 24807, 5750, 13678, 23398,
17996, 22829, 24147, 6401, 12204, 32399, 6521, 1091, 9366, 24179, 27541, 32249, 16548, 4127, 22780, 20583,
18683, 19432, 26860, 25527, 26970, 24868, 7985, 21710, 32732, 32683, 10348, 26975, 3735, 22951, 17897, 24975,
21448, 23089, 23922, 22905, 20759, 5213, 28699, 15146, 9179, 2562, 12762, 23081, 20490, 11203, 6998, 6080,
22252, 16126, 25737, 27047, 22452, 5230, 16615, 5899, 31307, 16710, 1349, 29271, 12649, 11109, 16335, 27911,
21539, 27190, 16550, 28602, 5730, 8779, 507, 30284, 24340, 126, 12378, 27937, 8321, 16221, 32114, 29472,
24394, 29157, 20031, 26860, 18339, 14837, 13256, 20228, 27827, 3489, 16799, 22091, 24377, 18318, 4573, 22992,
14340, 19732, 27398, 30702, 16356, 22729, 24044, 398, 3943, 7842, 1431, 23408, 29503, 23178, 9828, 28195,
24959, 2588, 13275, 25427, 16677, 16048, 26586, 31033, 15443, 17167, 11653, 4684, 22625, 9124, 1, 29405,
23472, 3205, 17403, 24558, 13024, 12512, 22128, 15240, 29527, 21109, 15033, 2679, 30076, 27107, 8288, 12241,
808, 9662, 9057, 32720, 7905, 23733, 26132, 4206, 4634, 14641, 10414, 8769, 4172, 15312, 31673, 21214,
28007, 9902, 17877, 29297, 30592, 16282, 14194, 8748, 23510, 15837, 16195, 6474, 22565, 5312, 12412, 15457,
13713, 16840, 19041, 3033, 14651, 25230, 32194, 26726, 23164, 8090, 29581, 2017, 6666, 21138, 1094, 31356,
28547, 30611, 15465, 8277, 25519, 25175, 14069, 3864, 27044, 16908, 15524, 4238, 18031, 136, 6933, 28531,
10872, 21807, 17641, 24370, 12008, 6465, 19775, 5821, 21541, 14441, 22142, 14947, 11176, 1471, 14255, 13360,
14017, 16797, 26894, 4453, 19486, 1448, 13230, 10752, 15854, 10928, 31158, 6075, 16457, 19578, 614, 6226,
13829, 12924, 16766, 32728, 23284, 12550, 25567, 23075, 4183, 24423, 29438, 27854, 17377, 1881, 19993, 26395,
8756, 19800, 27714, 13827, 21173, 16487, 20385, 16144, 28721, 316, 21047, 16898, 5590, 7753, 6394, 13127,
656, 363, 9524, 1746, 6789, 29569, 19021, 2971, 5728, 26007, 7571, 8203, 7871, 28233, 26470, 14513,
17252, 10661, 2280, 7546, 1860, 13017, 298, 2523, 8126, 27185, 6091, 10834, 10080, 18869, 20352, 11412,
21003, 30428, 12285, 31117, 14239, 26136, 13859, 21302, 7639, 13558, 22381, 20702, 19705, 8840, 20433, 25245,
7112, 14532, 9436, 13436, 25654, 25263, 29592, 22234, 3983, 11322, 28756, 12533, 4942, 6693, 5780, 32515,
25783, 19105, 1843, 1618, 4273, 4786, 27238, 31442, 19951, 14452, 17826, 12529, 12142, 14602, 26899, 23641,
2236, 13314, 29822, 22198, 29407, 4845, 24270, 8843, 9768, 169, 16370, 19244, 24838, 27954, 13348, 13023,
25995, 21564, 3750, 9678, 30444, 26994, 26114, 27667, 2062, 13808, 20035, 22715, 21376, 31746, 15739, 12136,
30222, 28673, 21411, 24539, 1031, 3072, 24370, 10133, 23011, 19464, 8495, 17343, 9708, 3012, 18009, 7168,
30806, 24095, 1486, 31080, 26083, 10660, 8375, 7909, 8911, 18985, 8956, 15095, 21247, 1706, 8244, 4688,
20107, 12352, 13125, 20767, 6613, 20050, 15628, 26665, 1906, 1329, 15343, 31369, 1468, 16027, 6522, 734,
6019, 14997, 13509, 6616, 11569, 26792, 15887, 4633, 3568, 31542, 469, 24265, 31560, 24018, 12573, 32395,
16228, 16583, 29925, 8304, 14897, 25453, 7031, 29432, 4332, 3003, 10294, 26361, 31627, 28938, 30702, 20324,
10697, 14115, 30238, 4434, 31378, 25738, 3039, 23534, 24196, 29852, 479, 11099, 19926, 32470, 15846, 13796,
3762, 18676, 4155, 28320, 24318, 26067, 5496, 22160, 14691, 21497, 28577, 20089, 30205, 1147, 32581, 23930,
31689, 13011, 10207, 5385, 17236, 3998, 16148, 2897, 20149, 3967, 30478, 24140, 25130, 25600, 4090, 11490,
10035, 30327, 14095, 3583, 32368, 18929, 25954, 7349, 29223, 13436, 26372, 19739, 16688, 12301, 5230, 22820,
13617, 8289, 12834, 7302, 15943, 24203, 24091, 11681, 27140, 6518, 26545, 27476, 32430, 24268, 8807, 27306,
24587, 30315, 29808, 26171, 22913, 29048, 17037, 18325, 10248, 19799, 8462, 24030, 24706, 29592, 29612, 32079,
15926, 27487, 19563, 24081, 11536, 21181, 5464, 22872, 27172, 24308, 4437, 13281, 26049, 2067, 23434, 32371,
18550, 5503, 27044, 17965, 13107, 17730, 13130, 9761, 9437, 28770, 24601, 11789, 14396, 9857, 30036, 32696,
6262, 9678, 19222, 21449, 6054, 24124, 23193, 10314, 9534, 9607, 13226, 21757, 6404, 1755, 19431, 31144,
6026, 10758, 11727, 10130, 13651, 8975, 27590, 28926, 20252, 10791, 12861, 32441, 32233, 3574, 3508, 3639,
18711, 6123, 18111, 23169, 8561, 25815, 24111, 18460, 12078, 13521, 13692, 10752, 17455, 19881, 25766, 22582,
12980, 7063, 21850, 21736, 11602, 25770, 7114, 6730, 14744, 5055, 27010, 5103, 6503, 4190, 1235, 27681,
18932, 13464, 24967, 7390, 13595, 32625, 1495, 13418, 31446, 1394, 11908, 825, 31428, 22509, 8640, 24838,
31741, 7527, 22171, 14753, 4415, 30746, 8501, 28279, 13767, 21950, 29697, 24820, 27943, 15866, 17480, 26874,
31380, 30538, 12671, 23825, 25771, 19602, 5843, 20075, 28887, 14404, 18361, 28652, 21947, 23550, 353, 15399,
7074, 10260, 29873, 5126, 30035, 11219, 31246, 4386, 2964, 8166, 12403, 19388, 27657, 20097, 10036, 24387,
7319, 23085, 12798, 17331, 30585, 7362, 3446, 15062, 25760, 28880, 28317, 21064, 23682, 13640, 31074, 9693,
17234, 27191, 21267, 11686, 28569, 8984, 31679, 8857, 32425, 26195, 23763, 6521, 30159, 8344, 8081, 13663,
22430, 16733, 20723, 23294, 15349, 6929, 4430, 23375, 9356, 16171, 10554, 16302, 18730, 22747, 14209, 10432,
5228, 2240, 24890, 2493, 18544, 31511, 26451, 16664, 27975, 28328, 28734, 29844, 14738, 19893, 20294, 27132,
4689, 21987, 9406, 207, 15993, 15815, 4504, 1010, 4258, 31443, 11946, 22107, 14034, 8401, 26783, 20585,
9020, 27155, 28638, 6530, 12073, 22511, 19977, 17297, 31731, 11862, 29651, 16887, 21564, 29522, 31096, 19987,
6346, 2078, 15957, 20512, 1681, 9136, 17467, 26569, 30212, 19949, 16801, 28299, 18971, 1880, 20625, 1076
};
static int rand(RandRangeSeed * seed) {
return RANDOM_NUMBERS[((*seed)++) % NUMBERS_COUNT];
}
float rand_rangef(RandRangeSeed * seed, float min, float max) {
return min + ((double)rand(seed) / RAND_MAX) * (max - min);
}
int rand_rangei(RandRangeSeed * seed, int min, int max) {
return rand_rangef(seed, min, max);
}
float rand_rangef_pow2(RandRangeSeed * seed, float min, float max) {
const float magnitude = (max - min)/2;
const float magnitude_sq = magnitude * magnitude;
const float result = rand_rangef(seed, -magnitude_sq, magnitude_sq);
return sqrtf(result < 0.0f ? -result : result) * (result < 0.0f ? -1.0f : 1.0f);
}