in commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java [173:201]
public double sample() {
double r;
double w;
double t;
do {
// Step 1:
final double u1 = rng.nextDouble();
final double u2 = rng.nextDouble();
final double v = beta * (Math.log(u1) - Math.log1p(-u1));
w = a * Math.exp(v);
final double z = u1 * u1 * u2;
r = gamma * v - LN_4;
final double s = a + r - w;
// Step 2:
if (s + LN_5_P1 >= 5 * z) {
break;
}
// Step 3:
t = Math.log(z);
if (s >= t) {
break;
}
// Step 4:
} while (r + alpha * (logAlpha - Math.log(b + w)) < t);
// Step 5:
return computeX(w);
}