<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a JIRA search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
SVN commits.

To generate the file RELEASE-NOTES.txt from this file:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version]

The <action> type attribute can be add,update,fix,remove.
-->

<!-- NOTE:
The description attribute entries below are specially formatted
so as to improve the layout of the generated text release notes.

The parsing process removes all line feeds, replacing them with a single space.
The Velocity template in src/changes/release-notes.vm has been enhanced to replace pairs of adjacent spaces
with a new-line in the release notes. (These spaces are ignored when displaying HTML).
If the output is not quite correct, check for invisible trailing spaces!
-->

<document xmlns="http://maven.apache.org/changes/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
  <properties>
    <title>Apache Commons RNG Release Notes</title>
  </properties>
  <body>

    <release version="1.7" date="2026-04-20" description="
New features, updates and bug fixes (requires Java 8).
">
      <action dev="aherbert" type="update" issue="RNG-192">
        Remove use of overriddable instance method for state initialisation during
        RNG construction. This introduces a behaviour change for affected RNGs
        initialized with a fixed seed that does not fill the entire generator state.
      </action>
      <action dev="aherbert" type="update" issue="RNG-191">
        "Philox4x64": Use java.lang.invoke to dynamically call Math multiply high methods
        for increased performance.
      </action>
      <action dev="aherbert" type="update" issue="RNG-190">
        "ContinuousUniformSampler": Add a special case for the open interval (0, 1)
        with increased performance.
      </action>
      <action dev="aherbert" type="add" issue="RNG-189">
        "ArbitrarilyJumpableUniformRandomProvider": Add an interface to allow a generator to
        jump an arbitrary distance in its output period.
      </action>
      <action dev="aherbert" due-to="Jherek Healy" type="add" issue="RNG-188">
        Add Philox4x32 and Philox4x64 random number generators.
      </action>
      <action dev="aherbert" type="fix">
        "JDKRandomBridge": Support the use of setSeed(long) after object deserialization.
      </action>
      <action dev="aherbert" type="update" issue="RNG-187">
        "ArraySampler": Improve performance on small ranges using batched index generation.
      </action>
</release>

    <release version="1.6" date="2024-07-15" description="
New features, updates and bug fixes (requires Java 8).
">
      <action dev="aherbert" type="add" issue="RNG-186">
        Correct the module OSGi exports. Use of multiple modules is validated in an OSGi
        integration test.
      </action>
      <action dev="aherbert" type="add" issue="RNG-184">
        New "ArraySampler" to support shuffling primitive and generic arrays with
        sub-range support.
      </action>
      <action dev="aherbert" type="update" issue="RNG-183">
        "InverseTransformParetoSampler": Modified to concentrate samples at the distribution
        lower/upper bounds for extreme shape parameters. Eliminates generation of outlier
        infinite samples and NaN samples under certain conditions. Changes sampling to use
        the RNG nextLong() method in-place of nextDouble().
      </action>
</release>

    <release version="1.5" date="2022-09-10" description="
New features, updates and bug fixes. Adds a commons-rng-bom module. Requires Java 8.
">
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-181">
        LXM family to support SplittableUniformRandomProvider. This allows creating a parallel
        stream of generators which will avoid sequence correlations between instances.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-179">
        "FastLoadedDiceRollerDiscreteSampler": Distribution sampler that uses the
        Fast Loaded Dice Roller (FLDR) algorithm for exact sampling from a discrete
        probability distribution.
      </action>
      <action dev="aherbert" type="add" issue="RNG-178">
        "JumpableUniformRandomProvider": Add support to generate Java 8 streams of new
        random generator instances using the jump method.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-177">
        "sampling": Add samples() method to the API to generate Java 8 streams of sample values.
      </action>
      <action dev="aherbert" type="add" issue="RNG-168">
        New LXM family of random generators. Added implementations of the LXM generators
        included in JDK 17.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="fix" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-173">
        "BaseProvider": Add a static method to extend input int[] and long[] seeds to a
        minimum length.
      </action>
      <action dev="aherbert" type="update" issue="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).
      </action>
      <action dev="aherbert" type="update" issue="RNG-172">
        "UniformLongSampler": Precompute rejection threshold for a non-power of 2 range.
      </action>
      <action dev="aherbert" type="update" issue="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.
      </action>
      <action dev="aherbert" type="fix" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-167">
        New "TSampler" class to sample from Student's t-distribution.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-166">
        Update "LogNormalSampler" and "BoxMullerLogNormalSampler" to allow a negative mean for
        the natural logarithm of the distribution values.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-165">
        "RejectionInversionZipfSampler": Allow a zero exponent in the Zipf sampler.
      </action>
      <action dev="aherbert" type="update" issue="RNG-160">
        "ZigguratSampler": Performance improvement using ternary operator to sort values.
      </action>
</release>

    <release version="1.4" date="2021-09-13" description="
New features, updates and bug fixes. Updates the minimum Java version to 8.
">
      <action dev="aherbert" type="update" issue="RNG-163">
        Update test suite to JUnit 5.
      </action>
      <action dev="aherbert" due-to="Arturo Bernal" type="update">
        Simplify assertions with simpler equivalent.
      </action>
      <action dev="aherbert" type="update" issue="RNG-162">
        Update the minimum Java version to 1.8.
      </action>
      <action dev="aherbert" type="update" issue="RNG-160">
        "ZigguratSampler.NormalizedGaussian": Performance improvement by extracting ziggurat
        edge sampling to a separate method.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-159">
        "ZigguratSampler.NormalizedGaussian": Corrected biased sampling within convex regions
        at the edge of the ziggurat.
      </action>
      <action dev="aherbert" type="add" issue="RNG-156">
        New "DirichletSampler" class to sample from a Dirichlet distribution.
      </action>
      <action dev="aherbert" type="update" issue="RNG-157">
        "UnitSphereSampler": Deprecate public constructor. Use the factory constructor to create
        an optimal sampler.
      </action>
      <action dev="aherbert" type="add" issue="RNG-137">
        New "StableSampler" class to sample from a stable distribution.
      </action>
      <action dev="aherbert" type="add" issue="RNG-138">
        New "CompositeSamplers" class to sample from a weighted combination of samplers.
      </action>
      <action dev="aherbert" type="add" issue="RNG-140">
        New "LongSampler" interface for sampling a long. New "UniformLongSampler" to sample
        from a range.
      </action>
      <action dev="aherbert" type="update" issue="RNG-155">
        "ZigguratNormalizedGaussianSampler": Update to a table size of 256.
      </action>
      <action dev="aherbert" type="update" issue="RNG-152">
        Update samplers to use ZigguratSampler.NormalizedGaussian for Gaussian deviates.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-146">
        "GaussianSampler": Prevent infinite mean and standard deviation.
      </action>
      <action dev="aherbert" type="update" issue="RNG-154">
        Update Gaussian samplers to avoid infinity in the tails of the distribution. Applies
        to: ZigguratNormalisedGaussianSampler; BoxMullerNormalizedGaussianSampler; and
        BoxMullerGaussianSampler.
      </action>
      <action dev="aherbert" type="update" issue="RNG-153">
        "UnitBallSampler": Update to use the ZigguratSampler for an exponential deviate for
        ball point picking.
      </action>
      <action dev="aherbert" type="update" issue="RNG-150">
        Update "LargeMeanPoissonSampler" and "GeometricSampler" to use the ZigguratSampler for
        exponential deviates.
      </action>
      <action dev="aherbert" type="add" issue="RNG-151">
         New "ZigguratSampler" implementation of the modified "Ziggurat" algorithm for
         Gaussian and exponential sampling.
      </action>
      <action dev="aherbert" type="add" issue="RNG-147">
         New "LevySampler" to sample from a Levy distribution.
      </action>
      <action dev="aherbert" type="add" issue="RNG-145">
        "ContinuousUniformSampler": Add optional support for an open interval: (lower, upper).
      </action>
      <action dev="aherbert" type="fix" issue="RNG-144">
        "AhrensDieterExponentialSampler": Avoid possible infinite loop during sampling if the
        underlying UniformRandomProvider creates a zero for the uniform deviate.
      </action>
      <action dev="aherbert" type="add" issue="RNG-143">
        "RandomSource": Add an instance create method. Deprecate the static create method.
      </action>
      <action dev="aherbert" type="add" issue="RNG-136">
        New "ObjectSampler&lt;T&gt;" and "SharedStateObjectSampler&lt;T&gt;" interfaces.
        These interfaces are implemented by samplers returning an object.
        This changes the functional compatibility of existing samplers that implement
        SharedStatedSampler&lt;R&gt;: CollectionSampler&lt;T&gt;; CombinationSampler;
        DiscreteProbabilityCollectionSampler&lt;T&gt;; PermutationSampler; and UnitSphereSampler.
        The method signature of the SharedStateSampler&lt;R&gt; 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&lt;R&gt;. It can now be assigned to SharedStateObjectSampler&lt;T&gt;
        which can be used to generate samples of type &lt;T&gt;.
        Code that assigned to SharedStatedSampler&lt;R&gt; should be updated.
      </action>
      <action dev="aherbert" type="add" issue="RNG-135">
        New "TetrahedronSampler" to sample uniformly from a tetrahedron.
      </action>
      <action dev="aherbert" type="add" issue="RNG-134">
        New "BoxSampler" to sample uniformly from a box (or hyperrectangle).
      </action>
      <action dev="aherbert" type="add" issue="RNG-133">
        New "LineSampler" to sample uniformly on a line segment.
      </action>
      <action dev="aherbert" type="add" issue="RNG-131">
        New "TriangleSampler" to sample uniformly from a triangle.
      </action>
      <action dev="aherbert" type="add" issue="RNG-132">
        New "o.a.c.rng.sampling.shape" package for sampling coordinates from shapes.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-130">
        "UnitSphereSampler": Fix 1 dimension sampling to only return vectors containing 1 or -1.
      </action>
      <action dev="aherbert" type="update" issue="RNG-129">
        "UnitSphereSampler": Improve performance with specialisations for low order dimensions.
        Added a factory constructor to create the sampler.
      </action>
      <action dev="aherbert" type="add" issue="RNG-128">
        New "UnitBallSampler" to generate coordinates uniformly within an n-unit ball.
      </action>
      <action dev="aherbert" type="add" issue="RNG-126">
        "PoissonSamplerCache": Method to return a SharedStateDiscreteSampler.
      </action>
      <action dev="aherbert" type="add" issue="RNG-124">
        Add fixed increment versions of the PCG generators.
      </action>
    </release>

    <release version="1.3" date="2019-11-08" description="
New features, updates and bug fixes (requires Java 6).
">
      <action dev="aherbert" type="update" issue="RNG-122">
        "SeedFactory": Use XoRoShiRo1024PlusPlus as the default source of randomness.
      </action>
      <action dev="aherbert" type="update" issue="RNG-121">
        "ChengBetaSampler": Algorithms for different distribution parameters have
        been delegated to specialised classes.
      </action>
      <action dev="aherbert" type="update" issue="RNG-120">
        Update security of serialization code for java.util.Random instances. Implement
        look-ahead deserialization or remove the use of ObjectInputStream.readObject().
      </action>
      <action dev="aherbert" type="update" issue="RNG-76">
        "SplitMix64": Added primitive long constructor.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="update" issue="RNG-119">
        Add LongJumpable support to XoShiRo generators previously only supporting Jumpable.
      </action>
      <action dev="aherbert" type="add" issue="RNG-117">
        "RandomSource": Support creating a byte[] seed suitable for the implementing
        generator class.
      </action>
      <action dev="aherbert" type="add" issue="RNG-116">
        "RandomSource": Expose interfaces supported by the implementing generator class
        with methods isJumpable() and isLongJumpable().
      </action>
      <action dev="aherbert" type="add" issue="RNG-111">
        New "JenkinsSmallFast32" and "JenkinsSmallFast64" generators.
      </action>
      <action dev="aherbert" type="update" issue="RNG-114">
        "ListSampler": Select the shuffle algorithm based on the list type. This improves
        performance for non-RandomAccess lists such as LinkedList.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-115">
        "JDKRandom": Fixed the restore state method to function when the instance has not
        previously been used to save state.
      </action>
      <action dev="aherbert" type="add" issue="RNG-112">
        New "DotyHumphreySmallFastCounting32" and "DotyHumphreySmallFastCounting64" generators.
      </action>
      <action dev="aherbert" type="update" issue="RNG-109">
        "DiscreteProbabilityCollectionSampler": Use a faster enumerated probability
        distribution sampler to replace the binary search algorithm.
      </action>
      <action dev="aherbert" type="add" issue="RNG-85">
        New "MiddleSquareWeylSequence" generator.
      </action>
      <action dev="aherbert" type="update" issue="RNG-90">
        "BaseProvider": Updated to use faster algorithm for nextInt(int).
      </action>
      <action dev="aherbert" type="update" issue="RNG-95">
        "DiscreteUniformSampler": Updated to use faster algorithms for generation of ranges.
      </action>
      <action dev="aherbert" type="add" issue="RNG-110">
        Factory methods for Discrete and Continuous distribution samplers. The factory method
        can choose the optimal implementation for the distribution parameters.
      </action>
      <action dev="aherbert" type="add" issue="RNG-84" due-to="Abhishek Singh Dhadwal">
        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.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-108">
        Update "SeedFactory" to improve performance.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-100">
        New "GuideTableDiscreteSampler" that can sample from any discrete distribution defined
        by an array of probabilities.
      </action>
      <action dev="aherbert" type="update" issue="RNG-106">
        Ensure SeedFactory produces non-zero seed arrays. This avoids invalid seeding of
        generators that cannot recover from a seed of zeros.
      </action>
      <action dev="aherbert" type="add" issue="RNG-98">
        New "LongJumpableUniformRandomProvider" interface extends JumpableUniformRandomProvider
        with a long jump method.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="update" issue="RNG-103">
        "LargeMeanPoissonSampler: Switch from SmallMeanPoissonSampler to use
        KempSmallMeanPoissonSampler for the fractional mean sample.
      </action>
      <action dev="aherbert" type="update" issue="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.
      </action>
      <action dev="aherbert" type="update" issue="RNG-77">
        "NumberFactory": Improve performance of int and long array to/from byte array
        conversions.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="fix" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="fix" issue="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.
      </action>
      <action dev="aherbert" type="fix" issue="RNG-92">
        "LargeMeanPoissonSampler": Requires mean >= 1.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="update" issue="RNG-88">
        Update the generation performance JMH benchmarks to have a reference baseline.
      </action>
      <action dev="aherbert" type="update" issue="RNG-87">
        "MultiplyWithCarry256": Performance improvement by advancing state one step per sample.
      </action>
      <action dev="aherbert" type="add" issue="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.
      </action>
      <action dev="aherbert" type="add" issue="RNG-78">
        New "ThreadLocalRandomSource" class provides thread safe access to random generators.
      </action>
      <action dev="aherbert" type="update" issue="RNG-81">
        "NumberFactory": Evenly sample all dyadic rationals between 0 and 1.
      </action>
      <action dev="aherbert" type="add" issue="RNG-79">
        Benchmark methods for producing nextDouble and nextFloat.
      </action>
      <action dev="aherbert" type="update" issue="RNG-73">
        Add the methods used from UniformRandomProvider to each sampler in the sampling module.
      </action>
      <action dev="aherbert" type="update" issue="RNG-74">
        "DiscreteUniformSampler": Algorithms for small and large integer ranges have
        been delegated to specialised classes.
      </action>
      <action dev="aherbert" type="add" issue="RNG-72">
        Add new JMH benchmark ConstructionPerformance.
      </action>
      <action dev="aherbert" type="add" issue="RNG-71">
        Validate parameters for the distribution samplers.
      </action>
      <action dev="aherbert" type="update" issue="RNG-68">
        "AhrensDieterMarsagliaTsangGammaSampler": Algorithms for small and large theta have
        been delegated to specialised classes.
      </action>
      <action dev="aherbert" type="add" issue="RNG-67">
        Instructions for how to build and run the examples-stress code.
      </action>
      <action dev="aherbert" type="add" issue="RNG-69">
        New "GeometricSampler" class.
      </action>
    </release>

    <release version="1.2" date="2018-12-12" description="
New features, updates and bug fixes (requires Java 6).
">
      <action dev="erans" type="update" issue="RNG-63">
        "NumberFactory": Some methods have become obsolete following RNG-57.
      </action>
      <action dev="erans" type="update" issue="RNG-64" due-to="Alex D. Herbert">
        "PermutationSampler" and "CombinationSampler" shared code moved to a utility class.
      </action>
      <action dev="erans" type="add" issue="RNG-62" due-to="Alex D. Herbert">
        New "CombinationSampler" class.
      </action>
      <action dev="erans" type="update" issue="RNG-61" due-to="Alex D. Herbert">
        "PermutationSampler": Performance improvement.
      </action>
      <action dev="erans" type="update" issue="RNG-57" due-to="Alex D. Herbert">
        Cache for using up all the bits provided by the underlying source of randomness.
      </action>
      <action dev="erans" type="update" issue="RNG-60">
        Use random seeds for unit testing.
      </action>
      <action dev="erans" type="update" issue="RNG-52">
        Set conservative upper bound in "LargePoissonSampler" to avoid truncation.
      </action>
      <action dev="erans" type="fix" issue="RNG-59">
        Use JDK's "SecureRandom" to seed the "SeedFactory".
      </action>
      <action dev="erans" type="update" issue="RNG-58">
        Allow part of RNG state to be contained in base classes, e.g. to enable
        caching in common code (see RNG-57).
      </action>
      <action dev="erans" type="update" issue="RNG-51" due-to="Alex D. Herbert">
        "PoissonSampler": Performance improvement.
      </action>
      <action dev="erans" type="fix" issue="RNG-56">
        "ZigguratNormalizedGaussianSampler": Missing statements in least used branch.
      </action>
      <action dev="erans" type="fix" issue="RNG-55" due-to="Alex D. Herbert">
        "UnitSphereSampler": Prevent returning NaN components and forbid
        negative dimension.
      </action>
    </release>

    <release version="1.1" date="2018-08-14" description="
New features, updates and bug fixes (requires Java 6).
">
      <action dev="erans" type="fix" issue="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.
      </action>
      <action dev="erans" type="update" issue="RNG-50" due-to="Alex D. Herbert">
        "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.
      </action>
      <action dev="erans" type="add" issue="RNG-37">
        Implementation of the "Ziggurat" algorithm for Gaussian sampling.
      </action>
      <action dev="erans" type="update" issue="RNG-42">
        Use "ZigguratNormalizedGaussianSampler" within the library.
      </action>
      <action dev="erans" type="add" issue="RNG-47">
        "DiscreteProbabilityCollectionSampler": Sampling from a collection of items
        with user-defined probabilities (feature ported from "Commons Math").
      </action>
      <action dev="erans" type="add" issue="RNG-43">
        "LogNormalSampler" with user-defined underlying "NormalizedGaussianSampler".
      </action>
      <action dev="erans" type="update" issue="RNG-46">
        Following RNG-43, "BoxMullerLogNormalSampler" has been deprecated.
      </action>
      <action dev="erans" type="add" issue="RNG-39">
        "UnitSphereSampler": generate random vectors isotropically located
        on the surface of a sphere (feature ported from "Commons Math").
      </action>
      <action dev="erans" type="add" issue="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).
      </action>
      <action dev="erans" type="add" issue="RNG-35">
        New generic "GaussianSampler" based on "NormalizedGaussianSampler"
        marker interface.
        Implementation of "BoxMullerNormalizedGaussianSampler" deprecates
        "BoxMullerGaussianSampler".
      </action>
    </release>

    <release version="1.0" date="2016-12-13" description="
This is the first release of Apache Commons RNG.

Contains the following modules:
  commons-rng-client-api;
  commons-rng-core;
  commons-rng-simple;
  commons-rng-sampling.

Requires Java 6.
">
    </release>


  </body>
</document>
