static IEnumerable<double> SamplesUnchecked(System.Random rnd, double scale) { return rnd.NextDoubleSequence().Select(x => scale*Math.Sqrt(-2.0*Math.Log(x))); }
static IEnumerable<int> SamplesUnchecked(System.Random rnd, double p) { return rnd.NextDoubleSequence().Select(r => r < p ? 1 : 0); }
static IEnumerable<double> SamplesUnchecked(System.Random rnd, double scale, double shape) { var power = -1.0/shape; return rnd.NextDoubleSequence().Select(x => scale*Math.Pow(x, power)); }
static IEnumerable<double> SamplesUnchecked(System.Random rnd, double shape, double scale) { var exponent = 1.0/shape; return rnd.NextDoubleSequence().Select(x => scale*Math.Pow(-Math.Log(x), exponent)); }
static IEnumerable<int> SamplesUnchecked(System.Random rnd, double p) { if (p == 1.0) { return Generate.RepeatSequence(1); } double rp = 1.0 - p; return rnd.NextDoubleSequence().Select(r => (int)Math.Ceiling(Math.Log(1.0 - r, rp))); }
static IEnumerable<double> SamplesUnchecked(System.Random rnd, double rate) { return rnd.NextDoubleSequence().Where(r => r != 0.0).Select(r => -Math.Log(r)/rate); }
static IEnumerable<double> SamplesUnchecked(System.Random rnd, double lower, double upper, double mode) { double ml = mode - lower, ul = upper - lower, um = upper - mode; double u = ml/ul, v = ul*ml, w = ul*um; return rnd.NextDoubleSequence().Select(x => x < u ? lower + Math.Sqrt(x*v) : upper - Math.Sqrt((1 - x)*w)); }