double random_gaussian({num mean: 0.0, num stdev: 1.0 })

Source

double random_gaussian({num mean = 0.0, num stdev = 1.0}) {
  double u1 = 0.0;
  double u2 = 0.0;
  double w = 0.0;
  m.Random r = new m.Random();
  do {
    u1 = 2 * r.nextDouble() - 1;
    u2 = 2 * r.nextDouble() - 1;
    w = u1 * u1 + u2 * u2;
  } while (w >= 1);

  w = m.sqrt((-2.0 * m.log(w)) / w);
  return mean + (u2 * w) * stdev;
}