double CRand::RandomNormal(bool bound) { double number = (cos(2 * PI * Random()) * sqrt((-2) * log(Random()))); if (!bound) return number; else { if ((number>=-2) && (number<=2)) return number; else return RandomNormal(bound); } }
// random number - 0 -> scale, with normal distribution // ignore results outside 3.5 stds from the mean const double RandomNormalScaled(const double scale, const double m, const double s) { double res = -99; while (res < -3.5 || res > 3.5) res = RandomNormal(m, s); return (res / 3.5*s + 1) * (scale / 2.0); }
double CRand::RandomNormal(double mu, double sigma, bool bound) { return (mu + sigma * RandomNormal(bound)); }