aboutsummaryrefslogtreecommitdiff
path: root/mirai.old/utils/random/xorshift.zig
blob: 79ccffe34d67c9405ca9ba839920e8ebc5c4bc06 (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
//! Xorshift64 random number generation

var state: u64 = 0x853C49E6748FEA9B;

pub fn set_seed(s: u64) void {
    state = if (s == 0) 0x853C49E6748FEA9B else s;
}

pub fn next_u64() u64 {
    state ^= state << 13;
    state ^= state >> 7;
    state ^= state << 17;
    return state;
}

pub fn next_u32() u32 {
    return @truncate(next_u64());
}

pub fn byte() u8 {
    return @truncate(next_u64());
}

pub fn range(min: u64, max: u64) u64 {
    return min + (next_u64() % (max - min + 1));
}