| 41 | } |
| 42 | |
| 43 | unsigned int CPrng::RandomBits() |
| 44 | { |
| 45 | dbg_assert(m_Seeded, "prng needs to be seeded before it can generate random numbers"); |
| 46 | |
| 47 | uint64_t x = m_State; |
| 48 | unsigned int Count = x >> 59; |
| 49 | |
| 50 | static const uint64_t s_Multiplier = 6364136223846793005u; |
| 51 | m_State = x * s_Multiplier + m_Increment; |
| 52 | x ^= x >> 18; |
| 53 | return RotateRight32(x >> 27, Count); |
| 54 | } |