This is an automated email from the ASF dual-hosted git repository. aherbert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-rng.git
The following commit(s) were added to refs/heads/master by this push: new 9b7a2d9 Change for loop to while loop. 9b7a2d9 is described below commit 9b7a2d9fdbd08ba3be78bc50f5104daef0e1ecc5 Author: Alex Herbert <aherb...@apache.org> AuthorDate: Wed Aug 7 20:34:06 2019 +0100 Change for loop to while loop. The loop is not conditioned to stop on the counter incremented in the loop. --- .../distribution/MarsagliaTsangWangDiscreteSampler.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java index 97b9228..8c04309 100644 --- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java +++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/MarsagliaTsangWangDiscreteSampler.java @@ -775,9 +775,9 @@ public final class MarsagliaTsangWangDiscreteSampler { // Recursive update of Poisson probability until the value is too small // p(x + 1) = p(x) * mean / (x + 1) double p = p0; - int i; - for (i = 1; p * DOUBLE_31 >= 1; i++) { - p *= mean / i; + int i = 1; + while (p * DOUBLE_31 >= 1) { + p *= mean / i++; } // Probabilities are 30-bit integers, assumed denominator 2^30 @@ -820,16 +820,16 @@ public final class MarsagliaTsangWangDiscreteSampler { // before the divisor i is large enough to start reducing the product (i.e. i > c). final double c = mean * Math.exp(-mean / mode); double p = 1.0; - int i; - for (i = 1; i <= mode; i++) { + for (int i = 1; i <= mode; i++) { p *= c / i; } final double pMode = p; // Find the upper limit using recursive computation of the p-value. // Note this will exit when i overflows to negative so no check on the range - for (i = mode + 1; p * DOUBLE_31 >= 1; i++) { - p *= mean / i; + int i = mode + 1; + while (p * DOUBLE_31 >= 1) { + p *= mean / i++; } final int last = i - 2;