Beispiel #1
0
void RNG::setSeed(int seed) {
    mt.init_genrand(seed);
    // Ein Mersennetwister braucht bei schlechten seeds bis zu
    // 600 Durchlaeufe um auf Temperatur zu kommen.
    for (int lauf = 0; lauf < 600; ++lauf)
        nextGaussian();
}
Beispiel #2
0
double InverseGaussian::sample()
{
	  double v = nextGaussian();   // sample from a normal distribution with a mean of 0 and 1 standard deviation

	  double y = v*v;
      double x = m_dMu + (m_dMu * m_dMu * y) / (2* m_dScale) - (m_dMu/(2*m_dScale)) * sqrt(4*m_dMu*m_dScale*y + m_dMu*m_dMu*y*y);

	  double test = cokus.random01();  // sample from a uniform distribution between 0 and 1

	  if (test <= (m_dMu)/(m_dMu + x))
             return x;
      else
             return (m_dMu*m_dMu) / x;
}