stellarUCI Chess engine written in C++20 |
git clone git://git.dimitrijedobrota.com/stellar.git |
Log | Files | Refs | README | LICENSE |
random.hpp (854B)
0 #ifndef STELLAR_RANDOM_H
1 #define STELLAR_RANDOM_H
3 #include "utils.hpp"
5 class Random {
6 public:
7 constexpr Random(void) = default;
8 constexpr Random(U64 seed) : state(seed) {}
10 constexpr U64 operator()(void) { return get_U64(); }
12 constexpr U32 get_U32(void) {
13 U32 number = state;
15 number ^= number << 13;
16 number ^= number >> 17;
17 number ^= number << 5;
19 return state = number;
20 }
22 constexpr U64 get_U64(void) {
23 U64 n1, n2, n3, n4;
25 n1 = (U64)(get_U32()) & C64(0xFFFF);
26 n2 = (U64)(get_U32()) & C64(0xFFFF);
27 n3 = (U64)(get_U32()) & C64(0xFFFF);
28 n4 = (U64)(get_U32()) & C64(0xFFFF);
30 return n1 | (n2 << 16) | (n3 << 32) | (n4 << 48);
31 }
33 private:
34 static const U32 default_seed = C32(1804289383);
35 U32 state = default_seed;
36 };
38 #endif