stellar

UCI 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 2 3 #include "utils.hpp" 4 5 class Random { 6 public: 7 constexpr Random(void) = default; 8 constexpr Random(U64 seed) : state(seed) {} 9 10 constexpr U64 operator()(void) { return get_U64(); } 11 12 constexpr U32 get_U32(void) { 13 U32 number = state; 14 15 number ^= number << 13; 16 number ^= number >> 17; 17 number ^= number << 5; 18 19 return state = number; 20 } 21 22 constexpr U64 get_U64(void) { 23 U64 n1, n2, n3, n4; 24 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); 29 30 return n1 | (n2 << 16) | (n3 << 32) | (n4 << 48); 31 } 32 33 private: 34 static const U32 default_seed = C32(1804289383); 35 U32 state = default_seed; 36 }; 37 38 #endif