public int Poisson(double mean) { if (mean < 0) { throw new ArgumentException("mean (" + mean + ") is less than 0"); } double l = Math.Exp(-mean); var k = 0; double p = 0; do { ++k; p *= this.Uniform(); } while (p > l); return k - 1; }