17 m_z = 36969*(m_z&65535) + (m_z>>16);
18 m_w = 18000*(m_w&65535) + (m_w>>16);
26 void UseSeed(uint32_t x);
27 void UseTimeSeed(
void);
29 void GenerateRandomMapping(uint32_t*dest,
size_t dim);
31 inline uint32_t GetSeed(){
35 inline uint32_t GetUint32(){
37 return (m_z<<16) + (m_w&0xFFFF);
39 inline uint16_t GetUint16(){
41 return (m_z<<8) + (m_w&0xFF);
43 inline double GetUniform(){
44 uint32_t u = this->GetUint32();
47 return (u + 1.0)*2.328306435454494e-10;
50 inline int GetInt(
int r_min,
int r_max){
51 uint32_t s = r_max - r_min + 1;
52 uint32_t r = GetUint16();
53 return r*s/65536UL + r_min;
55 inline double GetDouble(
double r_min,
double r_max){
56 double r = GetUniform();
57 return (r*(r_max - r_min) + r_min);
60 inline int operator()(
int r_min,
int r_max){
61 return GetInt(r_min,r_max);
63 inline double operator()(
double r_min,
double r_max){
64 return GetDouble(r_min,r_max);
67 inline bool Rate(uint16_t Num,uint16_t Den){
68 uint32_t r = this->GetUint16();
69 return (Den*r)<(Num*65536UL);