
              Apache Commons RNG 1.3 RELEASE NOTES

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

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.3 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).

New features:
o RNG-117:  Additional "XorShiRo" family generators. This adds 4 PlusPlus general purpose variants
        of existing generators and 3 variants of a large state (1024-bit) generator.
o RNG-117:  "RandomSource": Support creating a byte[] seed suitable for the implementing
        generator class.
o RNG-116:  "RandomSource": Expose interfaces supported by the implementing generator class
        with methods isJumpable() and isLongJumpable().
o RNG-111:  New "JenkinsSmallFast32" and "JenkinsSmallFast64" generators.
o RNG-19:  "JDKRandomWrapper": Wraps an instance of java.util.Random for use as a
        UniformRandomProvider. Can wrap a SecureRandom to use functionality
        provided by the JDK for cryptographic random numbers and platform dependent
        features such as reading /dev/urandom on Linux.
o RNG-112:  New "DotyHumphreySmallFastCounting32" and "DotyHumphreySmallFastCounting64" generators.
o RNG-85:  New "MiddleSquareWeylSequence" generator.
o RNG-110:  Factory methods for Discrete and Continuous distribution samplers. The factory method
        can choose the optimal implementation for the distribution parameters.
o RNG-84:  New Permuted Congruential Generators (PCG) from the PCG family.
        Added the LCG and MCG 32 bit output versions of the XSH-RS and XSH-RR operations,
        along with the 64 bit RXS-M-XS edition. Thanks to Abhishek Singh Dhadwal.
o RNG-102:  New "SharedStateSampler" interface to allow a sampler to create a new instance with
        a new source of randomness. Any pre-computed state can be shared between the samplers.
o RNG-108:  Update "SeedFactory" to improve performance.
o RNG-99:  New "AliasMethodDiscreteSampler" that can sample from any discrete distribution defined
        by an array of probabilities. Set-up is O(n) time and sampling is O(1) time.
o RNG-100:  New "GuideTableDiscreteSampler" that can sample from any discrete distribution defined
        by an array of probabilities.
o RNG-98:  New "LongJumpableUniformRandomProvider" interface extends JumpableUniformRandomProvider
        with a long jump method.
o RNG-97:  New "JumpableUniformRandomProvider" interface provides a jump method that advances
        the generator a large number of steps of the output sequence in a single operation. A
        copy is returned allowing repeat invocations to create a series of generators
        for use in parallel computations.
o RNG-101:  New "MarsagliaTsangWangDiscreteSampler" that provides samples from a discrete
        distribution stored as a look-up table using a single random integer deviate. Computes
        tables for the Poisson or Binomial distributions, and generically any provided discrete
        probability distribution.
o RNG-91:  New "KempSmallMeanPoissonSampler" that provides Poisson samples using only 1 random
        deviate per sample. This algorithm outperforms the SmallMeanPoissonSampler
        when the generator is slow.
o RNG-70:  New "XorShiRo" family of generators. This adds 6 new general purpose generators with
        different periods and 4 related generators with improved performance for floating-point
        generation.
o RNG-82:  New "XorShift1024StarPhi" generator. This is a modified implementation of
        XorShift1024Star that improves randomness of the output sequence. The XOR_SHIFT_1024_S
        enum has been marked deprecated as a note to users to switch to the new
        XOR_SHIFT_1024_S_PHI version.
o RNG-78:  New "ThreadLocalRandomSource" class provides thread safe access to random generators.
o RNG-79:  Benchmark methods for producing nextDouble and nextFloat.
o RNG-72:  Add new JMH benchmark ConstructionPerformance.
o RNG-71:  Validate parameters for the distribution samplers.
o RNG-67:  Instructions for how to build and run the examples-stress code.
o RNG-69:  New "GeometricSampler" class.

Fixed Bugs:
o RNG-115:  "JDKRandom": Fixed the restore state method to function when the instance has not
        previously been used to save state.
o RNG-96:  "AhrensDieterMarsagliaTsangGammaSampler": Fix parameter interpretation so that alpha
        is a 'shape' parameter and theta is a 'scale' parameter. This reverses the functionality
        of the constructor parameters from previous versions. Dependent code should be checked
        and parameters reversed to ensure existing functionality is maintained.
o RNG-93:  "SmallMeanPoissonSampler": Requires the Poisson probability for p(x=0) to be positive
        setting an upper bound on the mean of approximately 744.44.
o RNG-92:  "LargeMeanPoissonSampler": Requires mean >= 1.

Changes:
o RNG-122:  "SeedFactory": Use XoRoShiRo1024PlusPlus as the default source of randomness.
o RNG-121:  "ChengBetaSampler": Algorithms for different distribution parameters have
        been delegated to specialised classes.
o RNG-120:  Update security of serialization code for java.util.Random instances. Implement
        look-ahead deserialization or remove the use of ObjectInputStream.readObject().
o RNG-76:  "SplitMix64": Added primitive long constructor.
o RNG-119:  Add LongJumpable support to XoShiRo generators previously only supporting Jumpable.
o RNG-114:  "ListSampler": Select the shuffle algorithm based on the list type. This improves
        performance for non-RandomAccess lists such as LinkedList.
o RNG-109:  "DiscreteProbabilityCollectionSampler": Use a faster enumerated probability
        distribution sampler to replace the binary search algorithm.
o RNG-90:  "BaseProvider": Updated to use faster algorithm for nextInt(int).
o RNG-95:  "DiscreteUniformSampler": Updated to use faster algorithms for generation of ranges.
o RNG-106:  Ensure SeedFactory produces non-zero seed arrays. This avoids invalid seeding of
        generators that cannot recover from a seed of zeros.
o RNG-103:  "LargeMeanPoissonSampler: Switch from SmallMeanPoissonSampler to use
        KempSmallMeanPoissonSampler for the fractional mean sample.
o RNG-75:  "RandomSource.create(...)": Refactor internal components to allow custom seeding routines
        per random source. Improvements were made to the speed of creating generators with small
        seeds.
o RNG-77:  "NumberFactory": Improve performance of int and long array to/from byte array
        conversions.
o RNG-88:  Update the generation performance JMH benchmarks to have a reference baseline.
o RNG-87:  "MultiplyWithCarry256": Performance improvement by advancing state one step per sample.
o RNG-81:  "NumberFactory": Evenly sample all dyadic rationals between 0 and 1.
o RNG-73:  Add the methods used from UniformRandomProvider to each sampler in the sampling module.
o RNG-74:  "DiscreteUniformSampler": Algorithms for small and large integer ranges have
        been delegated to specialised classes.
o RNG-68:  "AhrensDieterMarsagliaTsangGammaSampler": Algorithms for small and large theta have
        been delegated to specialised classes.


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:

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

=============================================================================

              Apache Commons RNG 1.2 RELEASE NOTES

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

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.2 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-62:  New "CombinationSampler" class. Thanks to Alex D. Herbert.

Fixed Bugs:
o RNG-59:  Use JDK's "SecureRandom" to seed the "SeedFactory".
o RNG-56:  "ZigguratNormalizedGaussianSampler": Missing statements in least used branch.
o RNG-55:  "UnitSphereSampler": Prevent returning NaN components and forbid
        negative dimension. Thanks to Alex D. Herbert.

Changes:
o RNG-63:  "NumberFactory": Some methods have become obsolete following RNG-57.
o RNG-64:  "PermutationSampler" and "CombinationSampler" shared code moved to a utility class.
        Thanks to Alex D. Herbert.
o RNG-61:  "PermutationSampler": Performance improvement. Thanks to Alex D. Herbert.
o RNG-57:  Cache for using up all the bits provided by the underlying source of randomness.
        Thanks to Alex D. Herbert.
o RNG-60:  Use random seeds for unit testing.
o RNG-52:  Set conservative upper bound in "LargePoissonSampler" to avoid truncation.
o RNG-58:  Allow part of RNG state to be contained in base classes, e.g. to enable
        caching in common code (see RNG-57).
o RNG-51:  "PoissonSampler": Performance improvement. Thanks to Alex D. Herbert.


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:

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

=============================================================================

              Apache Commons RNG 1.1 RELEASE NOTES

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

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:

https://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:

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