aherbert [Wed, 30 Mar 2022 11:40:01 +0000 (12:40 +0100)]
Support methods can be static
aherbert [Wed, 30 Mar 2022 11:39:18 +0000 (12:39 +0100)]
Update checkNextInRange to use a LongSupplier
The generic type <T extends Number> was used as a long value. The type
can be dropped to avoid auto-boxing for all generator tests.
Modified methods to static.
aherbert [Wed, 30 Mar 2022 11:26:24 +0000 (12:26 +0100)]
Correct isUniformNextByte test
Chi-square critical value should be for 255 degrees of freedom.
This lowers the critical value from 311.56 to 310.46. The test is now
harder to pass.
aherbert [Wed, 30 Mar 2022 11:06:45 +0000 (12:06 +0100)]
Consistent error messages for nextInRange test
Port modifications from sampling ContinuousSamplerParametricTest to the
ProvidersCommonParametricTest in core and simple modules.
Updated the precision of the chi-square critical value.
Add failed chi-square values to the message.
Format failed chi-square values to 3 decimal places.
aherbert [Wed, 30 Mar 2022 10:10:37 +0000 (11:10 +0100)]
Consolidate Int/LongProvider to use next() as the source of random bits
This removes the mixed use of next and nextLong or nextInt. The next
method is default source of the random bits and should always be used.
Alex Herbert [Mon, 28 Mar 2022 20:09:01 +0000 (21:09 +0100)]
RNG-173: BaseProvider static method to extend an input array seed
aherbert [Tue, 29 Mar 2022 12:40:26 +0000 (13:40 +0100)]
Correct longAsInt output in the stress test application
RNG-171 changed the cached int source to output a long as two ints using
the low 32-bits, then high 32-bits.
Updated the RngDataOutput to support HiLo or LoHi. Added tests for each
implementation.
Dropped high-bits and low-bits command options. Added source64 option
with enum for high, low, high-Low, low-high, long, int. The default for
stress testing matches the caching implementation.
Update the test documentation to reflect the changes.
aherbert [Mon, 28 Mar 2022 14:01:15 +0000 (15:01 +0100)]
RNG-169: Avoid long to int[] that can generate a zero output seed.
This is relevant to small state RNGs with an int[] native seed such as
XoRoShiRo64StarStar.
aherbert [Wed, 23 Mar 2022 15:40:07 +0000 (15:40 +0000)]
Add missing <p> tags
Alex Herbert [Sun, 20 Mar 2022 21:45:31 +0000 (21:45 +0000)]
Fix trailing whitespace
Alex Herbert [Sun, 20 Mar 2022 21:36:01 +0000 (21:36 +0000)]
Document the lack of functional compatibility for derived output types.
Only the reference output type (int/long) from the generator is required
to maintain functional compatibility.
Alex Herbert [Sun, 20 Mar 2022 20:51:36 +0000 (20:51 +0000)]
RNG-171: Reduce the memory footprint in cached boolean and int source
This change has a performance improvement on some JDKs.
Add a benchmark to compare the performance with and without the cache.
Alex Herbert [Fri, 18 Mar 2022 16:25:45 +0000 (16:25 +0000)]
RNG-172: Support power of 2 by lowering limit by 1
This change has been made for completeness. In practice a different
sampler is used for powers of 2.
aherbert [Fri, 18 Mar 2022 14:46:48 +0000 (14:46 +0000)]
RNG-172: Pre-compute rejection threshold
Alex Herbert [Thu, 17 Mar 2022 22:36:29 +0000 (22:36 +0000)]
Use Java 1.8 method to compute map value if absent
Alex Herbert [Thu, 17 Mar 2022 22:19:05 +0000 (22:19 +0000)]
RNG-169: Track changes
Alex Herbert [Thu, 17 Mar 2022 22:08:55 +0000 (22:08 +0000)]
RNG-169: Remove redundant Seed2ArrayConverter implementation
The functionality has been moved to the Conversions class. This removes
unreleased public API methods from legacy convertor classes.
Add tests to ensure coverage for converter classes.
Alex Herbert [Thu, 17 Mar 2022 21:57:19 +0000 (21:57 +0000)]
Fix PMD errors
Alex Herbert [Thu, 17 Mar 2022 21:54:45 +0000 (21:54 +0000)]
RNG-169: Move array size conversions to Conversions class
Alex Herbert [Thu, 17 Mar 2022 21:48:56 +0000 (21:48 +0000)]
RNG-169: Move all conversions to the Conversions class
Remove use of instances of SeedConverter as the conversion is stateless.
Alex Herbert [Thu, 17 Mar 2022 09:26:14 +0000 (09:26 +0000)]
RNG-169: Expand primitive input seeds using a SplitMix64
This changes behaviour so that
if int == long:
int -> array1
long -> array2
array1 == array2
int -> array[0] == int -> long
Alex Herbert [Thu, 17 Mar 2022 09:21:54 +0000 (09:21 +0000)]
RNG-169: Avoid intermediate arrays during conversions
The following conversions now avoid intermediate arrays:
byte[] -> int
byte[] -> long
int[] -> long
Behaviour change:
int[] is now converted as if to long[] then to long. This avoids loss of
bits and changes the possible output seeds from 2^32 to 2^64.
aherbert [Wed, 16 Mar 2022 14:39:06 +0000 (14:39 +0000)]
RNG-169: Update array seed conversion to use optimum seed length
Avoid duplication of the input byte[] to zero fill it to a length
modulus 4 or 8 for conversion by the NumberFactory.
During array to array conversions only convert the minimum of the
required number of bytes for the native seed type, or the number of
input bytes.
Change all array conversions to use little-endian byte order.
Alex Herbert [Wed, 16 Mar 2022 00:06:47 +0000 (00:06 +0000)]
RNG-170: Ensure nextBytes is consistent with JDK range checks
Updated to match behaviour of System.arraycopy and JDK 9
Objects.checkFromIndexSize. This now allows:
nextBytes(new byte[0], 0, 0)
nextBytes(new byte[10], 10, 0)
Previously these would throw an exception.
aherbert [Tue, 15 Mar 2022 16:06:10 +0000 (16:06 +0000)]
Return the class type of the unrecognised seed.
This avoids creating a message containing the string representation of
an Object. This may be a very large String, for example a BitSet.
fix
aherbert [Tue, 15 Mar 2022 15:12:23 +0000 (15:12 +0000)]
Update NumberFactory to use parameterized/repeated tests
Add little-endian test for byte[] conversions.
Check all the test long/int values in nextBoolean.
aherbert [Thu, 10 Mar 2022 13:12:24 +0000 (13:12 +0000)]
Documentation typos
aherbert [Thu, 10 Mar 2022 11:10:30 +0000 (11:10 +0000)]
Add option to list a range of the RandomSource enum
aherbert [Thu, 10 Mar 2022 10:20:57 +0000 (10:20 +0000)]
Add missing generator name to example command
aherbert [Wed, 2 Mar 2022 13:41:27 +0000 (13:41 +0000)]
Add TSampler to continuous sampler performance JMH example
aherbert [Wed, 2 Mar 2022 13:26:34 +0000 (13:26 +0000)]
Add example histogram of the TSampler output to the userguide.
aherbert [Wed, 2 Mar 2022 13:22:13 +0000 (13:22 +0000)]
Add TSampler to example sampling application
Alex Herbert [Wed, 2 Mar 2022 01:03:14 +0000 (01:03 +0000)]
RNG-167: Sampling from a t-distribution
Alex Herbert [Wed, 2 Mar 2022 00:01:11 +0000 (00:01 +0000)]
Update chi-square test
Increase accuracy of the chi2 critical value.
Use String.format for the assertion message, including the chi2 critical
value.
Alex Herbert [Tue, 1 Mar 2022 23:58:32 +0000 (23:58 +0000)]
Compute p-value for the chi square test once.
Use String.format for the assertion message.
Alex Herbert [Sat, 23 Oct 2021 20:33:39 +0000 (21:33 +0100)]
Cache another constant in the large mean Poisson sampler
This avoids evaluating a constant sqrt expression in the sampling loop.
Alex Herbert [Sat, 23 Oct 2021 11:56:20 +0000 (12:56 +0100)]
Formatting
aherbert [Wed, 6 Oct 2021 17:10:17 +0000 (18:10 +0100)]
Correct javadoc for the bounds on the Poisson sampler mean
Alex Herbert [Sat, 2 Oct 2021 22:42:14 +0000 (23:42 +0100)]
Correct probability typo.
Alex Herbert [Fri, 1 Oct 2021 18:29:35 +0000 (19:29 +0100)]
RNG-166: LogNormalSamplers to allow a negative mean.
Changes:
- LogNormalSampler
- BoxNormalLogNormalSamplers
Also updated the constructor parameters from shape and scale to mu and
sigma. This matches the wikipedia reference and implementations in
Wolfram.
Alex Herbert [Fri, 1 Oct 2021 18:02:45 +0000 (19:02 +0100)]
RNG-165: Track changes
aherbert [Wed, 29 Sep 2021 16:43:58 +0000 (17:43 +0100)]
RNG-165: Allow a zero exponent in the Zipf sampler
aherbert [Wed, 29 Sep 2021 15:52:06 +0000 (16:52 +0100)]
RNG-160: Use ternary operator to sort two long values
This removes a 50:50 branch statement from concave overhang sampling.
Alex Herbert [Sat, 18 Sep 2021 07:05:19 +0000 (08:05 +0100)]
Directly test the SamplerBase class
There is no requirement to extend the class to access the pass-through
methods.
aherbert [Thu, 16 Sep 2021 12:45:02 +0000 (13:45 +0100)]
Allow ziggurat sampling from only the overhangs in the performance test
Add additional ternary variant for testing.
aherbert [Thu, 16 Sep 2021 11:40:41 +0000 (12:40 +0100)]
Fix javadoc mix up between convex and concave regions
Alex Herbert [Wed, 15 Sep 2021 23:43:53 +0000 (00:43 +0100)]
Added ternary variations to the ziggurat benchmark
Alex Herbert [Wed, 15 Sep 2021 22:37:57 +0000 (23:37 +0100)]
Ensure stream is closed using try-with-resources
aherbert [Tue, 14 Sep 2021 12:47:13 +0000 (13:47 +0100)]
Remove badges from examples README.md
The badges do not relate to the examples code.
The build badge is for the main RNG modules. No check is made if the
examples code even builds.
The coverage badge is for the main RNG code. Coverage of the examples is
low to minimal and is not reported on.
aherbert [Tue, 14 Sep 2021 12:43:25 +0000 (13:43 +0100)]
Fix links for browsing the examples javadoc
aherbert [Tue, 14 Sep 2021 12:34:49 +0000 (13:34 +0100)]
Remove badges and maven dependency from the examples modules.
The examples are no longer released to maven central so badges for the
code or the javadoc are not applicable.
aherbert [Tue, 14 Sep 2021 12:26:43 +0000 (13:26 +0100)]
Update Travis CI badge from .org to .com domain.
aherbert [Tue, 14 Sep 2021 12:17:29 +0000 (13:17 +0100)]
Update note about sending e-mail from an apache.org account.
aherbert [Tue, 14 Sep 2021 10:53:45 +0000 (11:53 +0100)]
Correct javadoc
aherbert [Mon, 13 Sep 2021 15:24:10 +0000 (16:24 +0100)]
Update announce subject line in release guide
aherbert [Mon, 13 Sep 2021 12:20:28 +0000 (13:20 +0100)]
Change release notes to use new commons tag format
Add note about how to modify the release notes during a release process.
aherbert [Mon, 13 Sep 2021 11:52:01 +0000 (12:52 +0100)]
Update release notes following release 1.4
aherbert [Mon, 13 Sep 2021 11:36:58 +0000 (12:36 +0100)]
Add release 1.4 javadoc links to the site.xml
aherbert [Mon, 13 Sep 2021 10:33:19 +0000 (11:33 +0100)]
Update examples app version to 1.5-SNAPSHOT
aherbert [Mon, 13 Sep 2021 10:32:04 +0000 (11:32 +0100)]
Update release and BC version in parent pom
aherbert [Mon, 13 Sep 2021 10:31:03 +0000 (11:31 +0100)]
Update README to refer to 1.4 release
aherbert [Mon, 13 Sep 2021 10:27:51 +0000 (11:27 +0100)]
Update pom to next development version (1.4 to 1.5)
aherbert [Mon, 13 Sep 2021 10:20:43 +0000 (11:20 +0100)]
Retrieve 1.4 release details from the release branch
aherbert [Tue, 7 Sep 2021 11:39:11 +0000 (12:39 +0100)]
Update javadoc.
Correct description of new RandomSource.create(...) method where the
enum defines the concrete implementation, not the first argument to
create.
Move description of parallel applications to a sub-section. Add
description of parallel support from the jumpable generators with a code
example.
aherbert [Mon, 6 Sep 2021 11:19:46 +0000 (12:19 +0100)]
Place @since tags after @see tags following Oracle's order convension
aherbert [Mon, 6 Sep 2021 11:01:54 +0000 (12:01 +0100)]
Add @since tags to new RandomSource.create methods
Alex Herbert [Sun, 5 Sep 2021 13:50:08 +0000 (14:50 +0100)]
Do not perform minimal site checkout in pre-site phase
This profile must now be explicitly activated.
Alex Herbert [Sun, 5 Sep 2021 13:34:55 +0000 (14:34 +0100)]
Exclude site-content.README from rat check
Use the same excludes in the build and reporting section
Alex Herbert [Sun, 5 Sep 2021 13:32:40 +0000 (14:32 +0100)]
Fix changes typo
Alex Herbert [Sun, 5 Sep 2021 13:31:21 +0000 (14:31 +0100)]
Update user guide dependencies to require Java 1.8
aherbert [Wed, 1 Sep 2021 15:33:27 +0000 (16:33 +0100)]
Format ziggurat tables
The byte[] MAP is now initialized using (byte) casting.
aherbert [Tue, 31 Aug 2021 16:44:23 +0000 (17:44 +0100)]
Add ziggurat versions with multiple max epsilon values
Correct exponential epsilon values to use the ceiling of the float value
before rounding to a long integer.
Alex Herbert [Sun, 29 Aug 2021 18:13:00 +0000 (19:13 +0100)]
Update grammar for conscious language checker
Alex Herbert [Sun, 29 Aug 2021 18:05:25 +0000 (19:05 +0100)]
Update grammar for conscious language checker
Alex Herbert [Sun, 29 Aug 2021 18:01:58 +0000 (19:01 +0100)]
Update grammar for conscious language checker
Alex Herbert [Sat, 28 Aug 2021 09:46:04 +0000 (10:46 +0100)]
Add more platform results for exp(z)
Alex Herbert [Sat, 28 Aug 2021 09:16:17 +0000 (10:16 +0100)]
Fix trailing spaces
Alex Herbert [Sat, 28 Aug 2021 09:13:04 +0000 (10:13 +0100)]
Add performance test for exp(x) with x in [-8, 0]
Alex Herbert [Fri, 27 Aug 2021 14:46:59 +0000 (15:46 +0100)]
Disable tests in JMH module.
Add a better fixed seed with a note on how to test samplers using a
random seed.
Alex Herbert [Fri, 27 Aug 2021 13:49:58 +0000 (14:49 +0100)]
Add performance test for extracting the sign bit
Update tests requiring a fast generator to use a LCG. Only applicable
when the upper bits are required.
Alex Herbert [Fri, 27 Aug 2021 13:27:04 +0000 (14:27 +0100)]
Remove branch frequencies from performance variations
The branch frequencies are the same as the main sampler. This eliminates
duplication and eases maintenance.
Alex Herbert [Fri, 27 Aug 2021 13:17:48 +0000 (14:17 +0100)]
Parameterise the ziggurat sampler test
Duplicate the test in the JMH module. This ensures all variations
correctly sample the distribution, i.e. changes do not introduce errors
in the algorithm.
This identified an error in ModifiedZigguratExponentialSamplerRecursion.
Alex Herbert [Fri, 27 Aug 2021 11:49:20 +0000 (12:49 +0100)]
Update ziggurat performance benchmark to match main code
Naming conventions and comments have been updated to match those in the
main sampling package. This is for ease of maintenance.
Alex Herbert [Fri, 27 Aug 2021 11:47:15 +0000 (12:47 +0100)]
Comment typo
aherbert [Thu, 26 Aug 2021 17:05:34 +0000 (18:05 +0100)]
Change another mask operation to a bit shift.
aherbert [Thu, 26 Aug 2021 17:05:04 +0000 (18:05 +0100)]
Update ziggurat sampler using result of the performance tests
Use a single method to interpolate x and y. This avoids a subtraction in
the interpolation of y.
Avoid recursion in the exponential sampler.
Use shifts to generate unsigned longs. This favours the upper bits of
the uniform deviate.
Each change is either mute or may have a marginal benefit depending on
the platform. Together the sampler should be consistently performant
across JDKs and platforms.
Update tests that manipulate the output from the exponential sampler:
stable sampler test
ziggurat sampler test
aherbert [Thu, 26 Aug 2021 14:47:37 +0000 (15:47 +0100)]
Disable interpolation test method
aherbert [Thu, 26 Aug 2021 14:22:33 +0000 (15:22 +0100)]
Update ziggurat test to target regions of the ziggurat.
This targets concave, inflection, and convex overhangs and the tail of
the Gaussian.
This targets concave overhangs, and the tail of the exponential.
Note: This test is still not able to identify minor errors in the sampling algorithm. The test cannot detect the difference between a concave region sampled correctly or sampled using a uniform sample from the lower-left triangle.
Alex Herbert [Wed, 25 Aug 2021 22:35:11 +0000 (23:35 +0100)]
PMD: Allow long class for ZigguratSampler
Alex Herbert [Wed, 25 Aug 2021 20:02:41 +0000 (21:02 +0100)]
Update ziggurat performance benchmark with more methods
Use only bit shifts for random positive longs.
Use a different method to sample y.
Benchmark methods to interpolate X or Y
aherbert [Wed, 25 Aug 2021 15:53:44 +0000 (16:53 +0100)]
Update observed frequencies with expected where appropriate.
The expected frequencies are obtained during the table construction.
They closely match the previously measured observed frequencies.
aherbert [Wed, 25 Aug 2021 15:36:32 +0000 (16:36 +0100)]
Add description of sampling method to the ziggurat sampler.
Update the javadoc for all values and methods to be consistent with the
summary description.
Alex Herbert [Wed, 25 Aug 2021 08:40:28 +0000 (09:40 +0100)]
Ensure same samplers are tested in single and sequential
Use a base class to define the samplers.
aherbert [Tue, 24 Aug 2021 17:13:00 +0000 (18:13 +0100)]
Benchmark using a long to get an index, compare it, and return the index
aherbert [Tue, 24 Aug 2021 16:42:55 +0000 (17:42 +0100)]
Add ziggurat exponential sampler with no recursion to the benchmark
aherbert [Tue, 24 Aug 2021 15:14:23 +0000 (16:14 +0100)]
Update ZigguaratSampler branch frequencies
aherbert [Tue, 24 Aug 2021 13:36:26 +0000 (14:36 +0100)]
Update ZigguaratSampler point of inflection for the Gaussian.
The point of inflection is the largest x value below 1. When x=1 the
second derivative of the Gaussian is zero (i.e. the point of
inflection).
aherbert [Tue, 24 Aug 2021 12:57:17 +0000 (13:57 +0100)]
Update ZigguaratSampler concave epsilon for the exponential.
This should be equal to approximately 9.2%. The previous value was
approximately 5.6% resulting in fast acceptance too often for overhangs.
aherbert [Tue, 24 Aug 2021 09:28:10 +0000 (10:28 +0100)]
RNG-163: Track changes
Alex Herbert [Thu, 19 Aug 2021 12:33:44 +0000 (13:33 +0100)]
Update release howto
Change testing mvn command to 'verify' in place of 'package' to ensure
checks are run.
Separate site generation from the release build of the binary artifacts.