16 const unsigned int m_a;
17 const unsigned long m_max;
20 inline long next_long_rand(
long seed)
24 lo = m_a * (long)(seed & 0xFFFF);
25 hi = m_a * (long)((
unsigned long)seed >> 16);
26 lo += (hi & 0x7FFF) << 16;
41 RNG(
unsigned long init_seed) :
44 m_rand(init_seed ? (init_seed & m_max) : 1)
49 virtual void seed(
unsigned long seed)
51 m_rand = (seed ? (seed & m_max) : 1);
56 m_rand = next_long_rand(m_rand);
57 return double(m_rand) / double(m_max);