
              Apache Commons RNG 1.5 RELEASE NOTES

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

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

The source output type (int/long) of a RNG must maintain behavioural compatibility
between releases; derived types may break behavioural compatibility. Any functional
changes will be recorded in the release notes.

Changes in this version include:

New features:
o RNG-182: Add a Bill of Materials (BOM) to aid in dependency management when referencing multiple
           Apache Commons RNG artifacts. The BOM should be used to ensure all imported artifacts are
           compatible.
o RNG-181: LXM family to support SplittableUniformRandomProvider. This allows creating a parallel
           stream of generators which will avoid sequence correlations between instances.
o RNG-180: New "SplittableUniformRandomProvider" interface to allow splitting a RNG into two
           objects, each of which implements the same interface (and can be recursively split
           indefinitely). Add default methods to support parallel stream implementations
           of the UniformRandomProvider stream methods.
o RNG-179: "FastLoadedDiceRollerDiscreteSampler": Distribution sampler that uses the
           Fast Loaded Dice Roller (FLDR) algorithm for exact sampling from a discrete
           probability distribution.
o RNG-178: "JumpableUniformRandomProvider": Add support to generate Java 8 streams of new
           random generator instances using the jump method.
o RNG-176: "UniformRandomProvider": Enhance the interface with default methods. Add range sample
           methods with a lower and upper bound. Add support to generate Java 8 streams of sample
           values. Note: This moves some method implementations from the core module to the
           client-api module. Binary compatibility is supported if the versions of these modules are
           matched. Users of the simple module should ensure the client-api and core modules are
           resolved as matched versions and not mismatched by transitive dependency resolution.
o RNG-177: "sampling": Add samples() method to the API to generate Java 8 streams of sample values.
o RNG-168: New LXM family of random generators. Added implementations of the LXM generators
           included in JDK 17.
o RNG-174: "RandomSource": Improve support for non-zero seeds. Seeding has been changed to specify
           a sub-range of the seed that must not be all zero. Introduces a functional change where
           byte[] seeds generated by RandomSource with a fixed UniformRandomProvider may be
           different. Seeds are now reproducible across calls using an input random source in an
           identical state.
o RNG-173: "BaseProvider": Add a static method to extend input int[] and long[] seeds to a
           minimum length.
o RNG-167: New "TSampler" class to sample from Student's t-distribution.

Fixed Bugs:
o RNG-175: "RandomSource.MSWS": createSeed(UniformRandomProvider) to handle a bad RNG.
           This fixes an infinite loop when the RNG output is not suitably random to create a seed.
o RNG-170: Update implementations of "UniformRandomProvider.nextBytes" with a range
           [start, start + length) to be consistent with the exception conditions of the
           JDK array range checks.
o RNG-166: Update "LogNormalSampler" and "BoxMullerLogNormalSampler" to allow a negative mean for
           the natural logarithm of the distribution values.
o RNG-165: "RejectionInversionZipfSampler": Allow a zero exponent in the Zipf sampler.

Changes:
o RNG-171: Reduce the memory footprint of the cached boolean and int source for the IntProvider
           and LongProvider. This change has a performance improvement on some JDKs.
           Note: This introduces a functional compatibility change to the output from the
           nextInt method of any LongProvider; the output is now little-endian as
           each long is returned as the low 32-bits then the high 32-bits.
           The bit output from nextBoolean is unchanged (little-endian order).
o RNG-172: "UniformLongSampler": Precompute rejection threshold for a non-power of 2 range.
o RNG-169: "RandomSource.create": Update array seed conversion to use optimum seed length.
           Avoid duplication of input bytes and conversion of bytes that will be discarded.
           This introduces a behavioural change for int[], long[], and int seed conversions.
           Any fixed seeds used in previous versions in byte[], long or the native seed type
           will create the same RNG state. All array-to-array seed conversions now use little
           endian format, matching the byte[] conversion behaviour since 1.0. All seed
           conversions that expand the seed size use the same generation method to provide
           additional bytes. Conversion of int[] to long avoids loss of bits
           changing the possible output seeds from 2^32 to 2^64.
o RNG-160: "ZigguratSampler": Performance improvement using ternary operator to sort values.


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