blob: ffd2a25324c9020acddaea29a10e4c26a573f6df (
plain)
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
|
typedef struct _FILETIME {
u32 dwLowDateTime;
u32 dwHighDateTime;
} FILETIME;
#define W32(r) __declspec(dllimport) r __stdcall
W32(void) GetSystemTimeAsFileTime(FILETIME *);
static u32 state[2];
void rand_seed(void)
{
FILETIME t;
GetSystemTimeAsFileTime(&t);
u32 val = t.dwLowDateTime;
val ^= val >> 16;
val *= 0x85ebca6b;
val ^= val >> 13;
val *= 0xc2b2ae35;
val ^= val >> 16;
state[0] = val;
state[1] = val ^ 0x49616e42U;
}
u32 rand_u32(void)
{
state[0] = (state[0] << 16) + (state[0] >> 16);
state[0] += state[1];
state[1] += state[0];
return state[0];
}
i32 rand_range(i32 min, i32 max)
{
u32 range = (u32)(max - min + 1);
u32 num = rand_u32() % range;
return min + (i32)num;
}
|