Author: erans Date: Wed Jul 31 14:00:50 2013 New Revision: 1508860 URL: http://svn.apache.org/r1508860 Log: MATH-1011 Delegate method "nextInt" in "RandomDataGenerator" to method "sample" in "UniformIntegerDistribution".
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java?rev=1508860&r1=1508859&r2=1508860&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java Wed Jul 31 14:00:50 2013 @@ -37,6 +37,7 @@ import org.apache.commons.math3.distribu import org.apache.commons.math3.distribution.TDistribution; import org.apache.commons.math3.distribution.WeibullDistribution; import org.apache.commons.math3.distribution.ZipfDistribution; +import org.apache.commons.math3.distribution.UniformIntegerDistribution; import org.apache.commons.math3.exception.MathInternalError; import org.apache.commons.math3.exception.NotANumberException; import org.apache.commons.math3.exception.NotFiniteNumberException; @@ -194,25 +195,7 @@ public class RandomDataGenerator impleme /** {@inheritDoc} */ public int nextInt(final int lower, final int upper) throws NumberIsTooLargeException { - if (lower >= upper) { - throw new NumberIsTooLargeException(LocalizedFormats.LOWER_BOUND_NOT_BELOW_UPPER_BOUND, - lower, upper, false); - } - final int max = (upper - lower) + 1; - if (max <= 0) { - // the range is too wide to fit in a positive int (larger than 2^31); as it covers - // more than half the integer range, we use directly a simple rejection method - final RandomGenerator rng = getRandomGenerator(); - while (true) { - final int r = rng.nextInt(); - if (r >= lower && r <= upper) { - return r; - } - } - } else { - // we can shift the range and generate directly a positive int - return lower + getRandomGenerator().nextInt(max); - } + return new UniformIntegerDistribution(getRandomGenerator(), lower, upper).sample(); } /** {@inheritDoc} */