This is a port of "Fast Splittable Pseudorandom Number Generators" by Steele
et. al. [1].
The paper's algorithm provides decent randomness for most purposes but
sacrifices cryptographic-quality randomness in favor of speed. The original
implementation is tested with DieHarder and BigCrush; see the paper for
details.
This implementation, originally from [2], is a port from the paper.
It also takes in to account the SplittableRandom.java source code in OpenJDK
v8u40-b25 as well as splittable_random.ml in Jane Street's standard library
overlay (kernel) v113.33.03, and Random.fs in FsCheck v3.
Other than the choice of initial seed for from this port should be
faithful.
Guy L. Steele, Jr., Doug Lea, Christine H. Flood
Fast splittable pseudorandom number generators
Comm ACM, 49(10), Oct 2014, pp453-472.
Generate a random Double in the [inclusive,exclusive) range.
Internal
8 declarations
These functions are exported in case you need them in a pinch, but are not
part of the public API and may change at any time, even as part of a minor
update.
A predefined gamma value's needed for initializing the "root" instances of
Seed. That is, instances not produced by splitting an already existing
instance.
We choose: the odd integer closest to 2^64/φ, where φ = (1 + √5)/2 is
the golden ratio.