From 8a35ca4f8e19b914a8503d1d5156212363cbaf10 Mon Sep 17 00:00:00 2001
From: Gilles
- * All data generation methods are based on {@code code nextDouble()}.
- * Concrete implementations must override
- * this method and should provide better / more
- * performant implementations of the other methods if the underlying PRNG
- * supplies them.
- * Implementations that do not override the default implementation of
- * {@code nextGaussian} should include a call to {@link #clear} in the
- * implementation of this method.
- * The default implementation fills the array with bytes extracted from
- * random integers generated using {@link #nextInt}.
- * The default implementation provided here returns
- *
- *
(int) (nextDouble() * Integer.MAX_VALUE)
- *
- * The default implementation returns - *
- * (int) (nextDouble() * n
- *
- *
- * @param n the bound on the random number to be returned. Must be
- * positive.
- * @return a pseudorandom, uniformly distributed {@code int}
- * value between 0 (inclusive) and n (exclusive).
- * @throws NotStrictlyPositiveException if {@code n <= 0}.
- */
- @Override
- public int nextInt(int n) {
- if (n <= 0 ) {
- throw new NotStrictlyPositiveException(n);
- }
- int result = (int) (nextDouble() * n);
- return result < n ? result : n - 1;
- }
-
- /**
- * Returns the next pseudorandom, uniformly distributed {@code long}
- * value from this random number generator's sequence. All
- * 264 possible {@code long} values
- * should be produced with (approximately) equal probability.
- * - * The default implementation returns - *
- * (long) (nextDouble() * Long.MAX_VALUE)
- *
- *
- * @return the next pseudorandom, uniformly distributed {@code long}
- *value from this random number generator's sequence
- */
- @Override
- public long nextLong() {
- return (long) ((2d * nextDouble() - 1d) * Long.MAX_VALUE);
- }
-
- /**
- * Returns the next pseudorandom, uniformly distributed
- * {@code boolean} value from this random number generator's
- * sequence.
- * - * The default implementation returns - *
- * nextDouble() <= 0.5
- *
- *
- * @return the next pseudorandom, uniformly distributed
- * {@code boolean} value from this random number generator's
- * sequence
- */
- @Override
- public boolean nextBoolean() {
- return nextDouble() <= 0.5;
- }
-
- /**
- * Returns the next pseudorandom, uniformly distributed {@code float}
- * value between {@code 0.0} and {@code 1.0} from this random
- * number generator's sequence.
- * - * The default implementation returns - *
- * (float) nextDouble()
- *
- *
- * @return the next pseudorandom, uniformly distributed {@code float}
- * value between {@code 0.0} and {@code 1.0} from this
- * random number generator's sequence
- */
- @Override
- public float nextFloat() {
- return (float) nextDouble();
- }
-
- /**
- * Returns the next pseudorandom, uniformly distributed
- * {@code double} value between {@code 0.0} and
- * {@code 1.0} from this random number generator's sequence.
- * - * This method provides the underlying source of random data used by the - * other methods.
- * - * @return the next pseudorandom, uniformly distributed - * {@code double} value between {@code 0.0} and - * {@code 1.0} from this random number generator's sequence - */ - @Override - public abstract double nextDouble(); - - /** - * Returns the next pseudorandom, Gaussian ("normally") distributed - * {@code double} value with mean {@code 0.0} and standard - * deviation {@code 1.0} from this random number generator's sequence. - *- * The default implementation uses the Polar Method - * due to G.E.P. Box, M.E. Muller and G. Marsaglia, as described in - * D. Knuth, The Art of Computer Programming, 3.4.1C.
- *- * The algorithm generates a pair of independent random values. One of - * these is cached for reuse, so the full algorithm is not executed on each - * activation. Implementations that do not override this method should - * make sure to call {@link #clear} to clear the cached value in the - * implementation of {@link #setSeed(long)}.
- * - * @return the next pseudorandom, Gaussian ("normally") distributed - * {@code double} value with mean {@code 0.0} and - * standard deviation {@code 1.0} from this random number - * generator's sequence - */ - @Override - public double nextGaussian() { - if (!Double.isNaN(cachedNormalDeviate)) { - double dev = cachedNormalDeviate; - cachedNormalDeviate = Double.NaN; - return dev; - } - double v1 = 0; - double v2 = 0; - double s = 1; - while (s >=1 ) { - v1 = 2 * nextDouble() - 1; - v2 = 2 * nextDouble() - 1; - s = v1 * v1 + v2 * v2; - } - if (s != 0) { - s = FastMath.sqrt(-2 * FastMath.log(s) / s); - } - cachedNormalDeviate = v2 * s; - return v1 * s; - } -} diff --git a/src/test/java/org/apache/commons/math4/random/AbstractRandomGeneratorTest.java b/src/test/java/org/apache/commons/math4/random/AbstractRandomGeneratorTest.java deleted file mode 100644 index 79cf97dd6..000000000 --- a/src/test/java/org/apache/commons/math4/random/AbstractRandomGeneratorTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.math4.random; - -import org.apache.commons.math4.random.RandomGenerator; - -/** - * Test cases for the AbstractRandomGenerator class. - * - */ - -public class AbstractRandomGeneratorTest extends RandomGeneratorAbstractTest { - - public AbstractRandomGeneratorTest() { - super(); - } - - @Override - protected RandomGenerator makeGenerator() { - RandomGenerator generator = new TestRandomGenerator(); - generator.setSeed(1001); - return generator; - } - -} diff --git a/src/test/java/org/apache/commons/math4/random/TestRandomGenerator.java b/src/test/java/org/apache/commons/math4/random/TestRandomGenerator.java deleted file mode 100644 index fc820b2a3..000000000 --- a/src/test/java/org/apache/commons/math4/random/TestRandomGenerator.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.math4.random; -import java.util.Random; - -import org.apache.commons.math4.random.AbstractRandomGenerator; - -/** - * Dummy AbstractRandomGenerator concrete subclass that just wraps a - * java.util.Random instance. Used by AbstractRandomGeneratorTest to test - * default implementations in AbstractRandomGenerator. - * - */ -public class TestRandomGenerator extends AbstractRandomGenerator { - - private Random random = new Random(); - - @Override - public void setSeed(long seed) { - clear(); - random.setSeed(seed); - } - - @Override - public double nextDouble() { - return random.nextDouble(); - } - -}