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. Note: A behavioural compatibility change has been introduced by the fix for RNG-96. 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 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. Historical list of changes: https://commons.apache.org/proper/commons-rng/changes-report.html 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/ Distribution packages can be downloaded from: https://commons.apache.org/proper/commons-rng/download_rng.cgi When downloading, please verify signatures using the KEYS file available at https://www.apache.org/dist/commons/KEYS Maven artifacts are also available in the central Maven repository: http://repo.maven.apache.org/maven2/org/apache/commons/ ---- <groupId>org.apache.commons</groupId> <artifactId>commons-rng-client-api</artifactId> <version>1.3</version> ---- <groupId>org.apache.commons</groupId> <artifactId>commons-rng-simple</artifactId> <version>1.3</version> ---- <groupId>org.apache.commons</groupId> <artifactId>commons-rng-sampling</artifactId> <version>1.3</version> ---- The Apache Commons Team