public double sample()

in commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/ChengBetaSampler.java [260:298]


        public double sample() {
            double w;
            while (true) {
                // Step 1:
                final double u1 = rng.nextDouble();
                final double u2 = rng.nextDouble();
                // Compute Y and Z
                final double y = u1 * u2;
                final double z = u1 * y;
                if (u1 < ONE_HALF) {
                    // Step 2:
                    if (ONE_QUARTER * u2 + z - y >= k1) {
                        continue;
                    }
                } else {
                    // Step 3:
                    if (z <= ONE_QUARTER) {
                        final double v = beta * (Math.log(u1) - Math.log1p(-u1));
                        w = a * Math.exp(v);
                        break;
                    }

                    // Step 4:
                    if (z >= k2) {
                        continue;
                    }
                }

                // Step 5:
                final double v = beta * (Math.log(u1) - Math.log1p(-u1));
                w = a * Math.exp(v);
                if (alpha * (logAlpha - Math.log(b + w) + v) - LN_4 >= Math.log(z)) {
                    break;
                }
            }

            // Step 6:
            return computeX(w);
        }