              Apache Commons RNG 1.1 RELEASE NOTES

The Apache Commons RNG team is pleased to announce the commons-rng-parent-1.1 release!

The Apache Commons RNG project provides pure-Java implementation of pseudo-random generators.

This is a minor release of Apache Commons RNG, containing a
few new features and performance improvements.

Apache Commons RNG 1.1 contains the following library modules:
  commons-rng-client-api (requires Java 6)
  commons-rng-core (requires Java 6)
  commons-rng-simple (requires Java 6)
  commons-rng-sampling (requires Java 6)

The code in module 'commons-rng-core' should not be accessed
directly by applications as a future release might make use of
the JPMS modularization feature available in Java 9+.

Additional code is provided in the following module:
  commons-rng-examples (requires Java 9)
It is however not part of the official API and no compatibility
should be expected in subsequent releases.

We would like to also note that unit tests in module 'commons-rng-sampling'
are bound to fail with some probability; this is expected due to the nature
of random number generation.  The 'maven-surefire-plugin' can be configured
to re-run tests that fail and pass the build if they succeed (the test will
be marked as 'flaky' in the report).

Changes in this version include:

New features:
o RNG-37:  Implementation of the "Ziggurat" algorithm for Gaussian sampling.
o RNG-47:  "DiscreteProbabilityCollectionSampler": Sampling from a collection of items
        with user-defined probabilities (feature ported from "Commons Math").
o RNG-43:  "LogNormalSampler" with user-defined underlying "NormalizedGaussianSampler".
o RNG-39:  "UnitSphereSampler": generate random vectors isotropically located
        on the surface of a sphere (feature ported from "Commons Math").
o RNG-36:  "MarsagliaNormalizedGaussianSampler": Faster variation of the
        Box-Muller algorithm.
        This version is used within "AhrensDieterMarsagliaTsangGammaSampler"
        "MarsagliaLogNormalSampler" and "PoissonSampler" (generated sequences
        will thus differ from those generated by version 1.0 of the library).
o RNG-35:  New generic "GaussianSampler" based on "NormalizedGaussianSampler"
        marker interface.
        Implementation of "BoxMullerNormalizedGaussianSampler" deprecates
        "BoxMullerGaussianSampler".

Fixed Bugs:
o RNG-53:  Class "SamplerBase" has been deprecated.  It was meant for internal use
        only but, through inheritance, it allows incorrect usage of the sampler
        classes.

Changes:
o RNG-50: "PoissonSampler": Algorithms for small mean and large mean have
	    been separated into dedicated classes.  Cache precomputation has
	    been disabled as it is only marginally used and is a performance
	    hit for small sampling sets.Thanks to Alex D. Herbert.
o RNG-42:  Use "ZigguratNormalizedGaussianSampler" within the library.
o RNG-46:  Following RNG-43, "BoxMullerLogNormalSampler" has been deprecated.
        Furthermore, its base class has been removed; although it is a binary
        incompatibility, it cannot cause any problem that were not already
        present in code using v1.0 of the library: Calls to the base class
        would have raised a NPE.


For complete information on Apache Commons RNG, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons RNG website:

http://commons.apache.org/proper/commons-rng/

-----------------------------------------------------------------------------

              Apache Commons RNG 1.0 RELEASE NOTES

The Apache Commons RNG team is pleased to announce the release of Apache Commons RNG 1.0

The Apache Commons RNG project provides pure-Java implementation of pseudo-random generators.

This is the first release of Apache Commons RNG.
Apache Commons RNG 1.0 contains the following modules:
 commons-rng-client-api (requires Java 6)
 commons-rng-core (requires Java 6)
 commons-rng-simple (requires Java 6)
 commons-rng-sampling (requires Java 6)
 commons-rng-jmh (requires Java 6)
 commons-rng-examples (requires Java 7)

No changes defined in this version.

For complete information on Apache Commons RNG, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons RNG website:

http://commons.apache.org/proper/commons-rng/


Have fun!
-Apache Commons RNG team