Merge branch 'master' of git://github.com/apache/commons-rng into improvement-RNG-51
Project: http://git-wip-us.apache.org/repos/asf/commons-rng/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-rng/commit/21927cbc Tree: http://git-wip-us.apache.org/repos/asf/commons-rng/tree/21927cbc Diff: http://git-wip-us.apache.org/repos/asf/commons-rng/diff/21927cbc Branch: refs/heads/master Commit: 21927cbc3005e5a7f3a45c527597a5733d735b4d Parents: 120d275 f559915 Author: aherbert <a.herb...@sussex.ac.uk> Authored: Fri Sep 21 14:55:37 2018 +0100 Committer: aherbert <a.herb...@sussex.ac.uk> Committed: Fri Sep 21 14:55:37 2018 +0100 ---------------------------------------------------------------------- README.md | 2 +- RELEASE-NOTES.txt | 99 ++++++ commons-rng-client-api/pom.xml | 5 +- commons-rng-client-api/src/site/site.xml | 2 + commons-rng-core/pom.xml | 6 +- commons-rng-core/src/site/site.xml | 2 + commons-rng-examples/examples-jmh/pom.xml | 4 +- .../examples-jpms/jpms-app/pom.xml | 6 +- .../examples-jpms/jpms-lib/pom.xml | 4 +- commons-rng-examples/examples-jpms/pom.xml | 4 +- commons-rng-examples/examples-jpms/runApp.sh | 2 +- .../examples-quadrature/pom.xml | 4 +- commons-rng-examples/examples-sampling/pom.xml | 4 +- commons-rng-examples/examples-stress/pom.xml | 4 +- commons-rng-examples/pom.xml | 10 +- commons-rng-sampling/pom.xml | 8 +- .../commons/rng/sampling/UnitSphereSampler.java | 13 + .../AhrensDieterExponentialSampler.java | 15 +- .../AhrensDieterMarsagliaTsangGammaSampler.java | 17 +- .../distribution/BoxMullerGaussianSampler.java | 15 +- .../distribution/BoxMullerLogNormalSampler.java | 27 +- .../BoxMullerNormalizedGaussianSampler.java | 11 +- .../sampling/distribution/ChengBetaSampler.java | 15 +- ...ousInverseCumulativeProbabilityFunction.java | 2 + .../distribution/ContinuousSampler.java | 2 + .../distribution/ContinuousUniformSampler.java | 11 +- ...eteInverseCumulativeProbabilityFunction.java | 2 + .../sampling/distribution/DiscreteSampler.java | 2 + .../distribution/DiscreteUniformSampler.java | 13 +- .../InverseTransformContinuousSampler.java | 11 +- .../InverseTransformDiscreteSampler.java | 11 +- .../InverseTransformParetoSampler.java | 11 +- .../distribution/LargeMeanPoissonSampler.java | 11 +- .../MarsagliaNormalizedGaussianSampler.java | 11 +- .../distribution/NormalizedGaussianSampler.java | 2 + .../sampling/distribution/PoissonSampler.java | 7 +- .../RejectionInversionZipfSampler.java | 9 +- .../rng/sampling/distribution/SamplerBase.java | 5 + .../distribution/SmallMeanPoissonSampler.java | 11 +- .../ZigguratNormalizedGaussianSampler.java | 49 ++- commons-rng-sampling/src/site/site.xml | 2 + .../rng/sampling/UnitSphereSamplerTest.java | 23 ++ .../ZigguratNormalizedGaussianSamplerTest.java | 48 +++ commons-rng-simple/pom.xml | 6 +- commons-rng-simple/src/site/site.xml | 2 + dist-archive/pom.xml | 342 ++++++++++++------- dist-archive/src/assembly/bin.xml | 13 + dist-archive/src/assembly/src.xml | 9 +- pom.xml | 51 ++- src/assembly/bin.xml | 45 +-- src/assembly/src.xml | 42 +-- src/changes/changes.xml | 30 +- .../release-notes/RELEASE-NOTES-1.0.txt | 22 ++ .../release-notes/RELEASE-NOTES-1.1.txt | 99 ++++++ src/site/site.xml | 1 + src/site/xdoc/download_rng.xml | 28 +- src/site/xdoc/release-history.xml | 38 +++ 57 files changed, 918 insertions(+), 332 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-rng/blob/21927cbc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java ---------------------------------------------------------------------- diff --cc commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java index f07eb94,6a70113..6604015 --- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java +++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/LargeMeanPoissonSampler.java @@@ -100,13 -101,9 +103,13 @@@ public class LargeMeanPoissonSample */ public LargeMeanPoissonSampler(UniformRandomProvider rng, double mean) { - super(rng); + this.rng = rng; if (mean <= 0) { - throw new IllegalArgumentException(mean + " <= " + 0); + throw new IllegalArgumentException(mean + " <= " + 0); + } + // The algorithm is not valid if Math.floor(mean) is not an integer. + if (mean > Integer.MAX_VALUE) { + throw new IllegalArgumentException(mean + " > " + Integer.MAX_VALUE); } gaussian = new ZigguratNormalizedGaussianSampler(rng); @@@ -249,155 -205,6 +252,155 @@@ /** {@inheritDoc} */ @Override public String toString() { - return "Large Mean Poisson deviate [" + super.toString() + "]"; + return "Large Mean Poisson deviate [" + rng.toString() + "]"; } + + /** + * Gets the initialisation state of the sampler. + * + * <p>The state is computed using an integer {@code lambda} value of + * {@code lambda = (int)Math.floor(mean)}. + * + * <p>The state will be suitable for reconstructing a new sampler with a mean + * in the range {@code lambda <= mean < lambda+1} using + * {@link #LargeMeanPoissonSampler(UniformRandomProvider, LargeMeanPoissonSamplerState, double)}. + * + * @return the state + */ + LargeMeanPoissonSamplerState getState() { + return new LargeMeanPoissonSamplerState(lambda, logLambda, logLambdaFactorial, + delta, halfDelta, twolpd, p1, p2, c1); + } + + /** + * Encapsulate the state of the sampler. The state is valid for construction of + * a sampler in the range {@code lambda <= mean < lambda+1}. + * + * <p>This class is immutable. + * + * @see #getLambda() + */ + static final class LargeMeanPoissonSamplerState { + /** Algorithm constant {@code lambda}. */ + private final double lambda; + /** Algorithm constant {@code logLambda}. */ + private final double logLambda; + /** Algorithm constant {@code logLambdaFactorial}. */ + private final double logLambdaFactorial; + /** Algorithm constant {@code delta}. */ + private final double delta; + /** Algorithm constant {@code halfDelta}. */ + private final double halfDelta; + /** Algorithm constant {@code twolpd}. */ + private final double twolpd; + /** Algorithm constant {@code p1}. */ + private final double p1; + /** Algorithm constant {@code p2}. */ + private final double p2; + /** Algorithm constant {@code c1}. */ + private final double c1; + + /** + * Creates the state. + * + * <p>The state is valid for construction of a sampler in the range + * {@code lambda <= mean < lambda+1} where {@code lambda} is an integer. + * + * @param lambda the lambda + * @param logLambda the log lambda + * @param logLambdaFactorial the log lambda factorial + * @param delta the delta + * @param halfDelta the half delta + * @param twolpd the two lambda plus delta + * @param p1 the p1 constant + * @param p2 the p2 constant + * @param c1 the c1 constant + */ + private LargeMeanPoissonSamplerState(double lambda, double logLambda, + double logLambdaFactorial, double delta, double halfDelta, double twolpd, + double p1, double p2, double c1) { + this.lambda = lambda; + this.logLambda = logLambda; + this.logLambdaFactorial = logLambdaFactorial; + this.delta = delta; + this.halfDelta = halfDelta; + this.twolpd = twolpd; + this.p1 = p1; + this.p2 = p2; + this.c1 = c1; + } + + /** + * Get the lambda value for the state. + * + * <p>Equal to {@code floor(mean)} for a Poisson sampler. + * @return the lambda value + */ + int getLambda() { + return (int) getLambdaRaw(); + } + + /** + * @return algorithm constant {@code lambda} + */ + double getLambdaRaw() { + return lambda; + } + + /** + * @return algorithm constant {@code logLambda} + */ + double getLogLambda() { + return logLambda; + } + + /** + * @return algorithm constant {@code logLambdaFactorial} + */ + double getLogLambdaFactorial() { + return logLambdaFactorial; + } + + /** + * @return algorithm constant {@code delta} + */ + double getDelta() { + return delta; + } + + /** + * @return algorithm constant {@code halfDelta} + */ + double getHalfDelta() { + return halfDelta; + } + + /** + * @return algorithm constant {@code twolpd} + */ + double getTwolpd() { + return twolpd; + } + + /** + * @return algorithm constant {@code p1} + */ + double getP1() { + return p1; + } + + /** + * @return algorithm constant {@code p2} + */ + double getP2() { + return p2; + } + + /** + * @return algorithm constant {@code c1} + */ + double getC1() { + return c1; + } + } } http://git-wip-us.apache.org/repos/asf/commons-rng/blob/21927cbc/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java ---------------------------------------------------------------------- diff --cc commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java index 8bab0f0,246d2cf..2889108 --- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java +++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSampler.java @@@ -35,16 -35,15 +35,19 @@@ import org.apache.commons.rng.UniformRa * </blockquote> * </li> * </ul> + * + * @since 1.0 */ public class PoissonSampler + extends SamplerBase implements DiscreteSampler { - /** Value for switching sampling algorithm. */ - private static final double PIVOT = 40; + /** + * Value for switching sampling algorithm. + * + * <p>Package scope for the {@link PoissonSamplerCache}. + */ + static final double PIVOT = 40; /** The internal Poisson sampler. */ private final DiscreteSampler poissonSampler;