public int Hypergeometric(int trials, int ones, int count)
{
if (ones < 0) {
throw new ArgumentException("ones (" + ones + ") is less than 0");
}
if (ones > count) {
throw new ArgumentException("ones (" + ones + ") is more than " +
count);
}
if (count < 0) {
throw new ArgumentException("count (" + count +
") is less than 0");
}
if (trials < 0) {
throw new ArgumentException("trials (" + trials +
") is less than 0");
}
if (trials > count) {
throw new ArgumentException("trials (" + trials +
") is more than " + count);
}
var ret = 0;
for (var i = 0; i < trials && ones > 0; ++i) {
if (this.UniformInt(count) < ones) {
--ones;
++ret;
}
--count;
}
return ret;
}