[ANNOUNCEMENT] Apache Commons RNG Version 1.3 Released

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[ANNOUNCEMENT] Apache Commons RNG Version 1.3 Released

Alex Herbert-2
The Apache Commons Team is pleased to announce the availability of
version 1.3 of "Apache Commons RNG".

Apache Commons RNG provides Java implementations of pseudo-random
numbers generators.

A behavioural compatibility change has been introduced by the fix for

Changes in this version include:

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
(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
 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
The factory method can choose the optimal implementation for the
o RNG-84:  New Permuted Congruential Generators (PCG) from the PCG family.
 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
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
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
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
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
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
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
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
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
previous versions. Dependent code should be checked and parameters reversed
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
o RNG-92:  "LargeMeanPoissonSampler": Requires mean >= 1.

o RNG-122:  "SeedFactory": Use XoRoShiRo1024PlusPlus as the default source
o RNG-121:  "ChengBetaSampler": Algorithms for different distribution
have been delegated to specialised classes.
o RNG-120:  Update security of serialization code for java.util.Random
Implement look-ahead deserialization or remove the use of
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
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
of creating generators with small seeds.
o RNG-77:  "NumberFactory": Improve performance of int and long array
byte array conversions.
o RNG-88:  Update the generation performance JMH benchmarks to have a
o RNG-87:  "MultiplyWithCarry256": Performance improvement by advancing
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
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
large theta have been delegated to specialised classes.

Historical list of changes:

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

Distribution packages can be downloaded from:

When downloading, please verify signatures using the KEYS file
available at

Maven artifacts are also available in the central Maven repository:


The Apache Commons Team