
              Apache Commons RNG 1.4 RELEASE NOTES

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

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.4 contains the following library modules:
 commons-rng-client-api (requires Java 8)
 commons-rng-core (requires Java 8)
 commons-rng-simple (requires Java 8)
 commons-rng-sampling (requires Java 8)

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 11+.

Additional code is provided in the following modules:
 commons-rng-examples-quadrature (requires Java 8)
 commons-rng-examples-jmh (requires Java 8)
 commons-rng-examples-sampling (requires Java 8)
 commons-rng-examples-stress (requires Java 8)
 commons-rng-examples-jpms (requires Java 11)

It is however not part of the official API and no compatibility
should be expected in subsequent releases.

It must be noted that, due to the nature of random number generation, some unit tests
are bound to fail with some probability. The 'maven-surefire-plugin' is configured
to re-run tests that fail, and pass the build if they succeed within the allotted
number of reruns (the test will be marked as 'flaky' in the report).

Changes in this version include:

New features:
o RNG-156: New "DirichletSampler" class to sample from a Dirichlet distribution.
o RNG-137: New "StableSampler" class to sample from a stable distribution.
o RNG-138: New "CompositeSamplers" class to sample from a weighted combination of samplers.
o RNG-140: New "LongSampler" interface for sampling a long. New "UniformLongSampler" to sample
           from a range.
o RNG-151: New "ZigguratSampler" implementation of the modified "Ziggurat" algorithm for
           Gaussian and exponential sampling.
o RNG-147: New "LevySampler" to sample from a Levy distribution.
o RNG-145: "ContinuousUniformSampler": Add optional support for an open interval: (lower, upper).
o RNG-143: "RandomSource": Add an instance create method. Deprecate the static create method.
o RNG-136: New "ObjectSampler<T>" and "SharedStateObjectSampler<T>" interfaces.
           These interfaces are implemented by samplers returning an object.
           This changes the functional compatibility of existing samplers that implement
           SharedStatedSampler<R>: CollectionSampler<T>; CombinationSampler;
           DiscreteProbabilityCollectionSampler<T>; PermutationSampler; and UnitSphereSampler.
           The method signature of the SharedStateSampler<R> interface remains
           'public R withUniformRandomProvider(UniformRandomProvider)'. The result can still be
           assigned to an instance of the same class R; it can no longer be assigned to an instance
           of SharedStatedSampler<R>. It can now be assigned to SharedStateObjectSampler<T>
           which can be used to generate samples of type <T>.
           Code that assigned to SharedStatedSampler<R> should be updated.
o RNG-135: New "TetrahedronSampler" to sample uniformly from a tetrahedron.
o RNG-134: New "BoxSampler" to sample uniformly from a box (or hyperrectangle).
o RNG-133: New "LineSampler" to sample uniformly on a line segment.
o RNG-131: New "TriangleSampler" to sample uniformly from a triangle.
o RNG-132: New "o.a.c.rng.sampling.shape" package for sampling coordinates from shapes.
o RNG-128: New "UnitBallSampler" to generate coordinates uniformly within an n-unit ball.
o RNG-126: "PoissonSamplerCache": Method to return a SharedStateDiscreteSampler.
o RNG-124: Add fixed increment versions of the PCG generators.

Fixed Bugs:
o RNG-159: "ZigguratSampler.NormalizedGaussian": Corrected biased sampling within convex regions
           at the edge of the ziggurat.
o RNG-146: "GaussianSampler": Prevent infinite mean and standard deviation.
o RNG-144: "AhrensDieterExponentialSampler": Avoid possible infinite loop during sampling if the
           underlying UniformRandomProvider creates a zero for the uniform deviate.
o RNG-130: "UnitSphereSampler": Fix 1 dimension sampling to only return vectors containing 1 or -1.

Changes:
o RNG-163: Update test suite to JUnit 5.
o          Simplify assertions with simpler equivalent. Thanks to Arturo Bernal.
o RNG-162: Update the minimum Java version to 1.8.
o RNG-160: "ZigguratSampler.NormalizedGaussian": Performance improvement by extracting ziggurat
           edge sampling to a separate method.
o RNG-157: "UnitSphereSampler": Deprecate public constructor. Use the factory constructor to create
           an optimal sampler.
o RNG-155: "ZigguratNormalizedGaussianSampler": Update to a table size of 256.
o RNG-152: Update samplers to use ZigguratSampler.NormalizedGaussian for Gaussian deviates.
o RNG-154: Update Gaussian samplers to avoid infinity in the tails of the distribution. Applies
           to: ZigguratNormalisedGaussianSampler; BoxMullerNormalizedGaussianSampler; and
           BoxMullerGaussianSampler.
o RNG-153: "UnitBallSampler": Update to use the ZigguratSampler for an exponential deviate for
           ball point picking.
o RNG-150: Update "LargeMeanPoissonSampler" and "GeometricSampler" to use the ZigguratSampler for
           exponential deviates.
o RNG-129: "UnitSphereSampler": Improve performance with specialisations for low order dimensions.
           Added a factory constructor to create the sampler.


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.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/
