- GOLDEN_GAMMA
alias GOLDEN_GAMMA = DEFAULT_SPLITMIX_INCREMENT
- SplitMix64
alias SplitMix64 = SplitMixEngine!(staffordMix13, false)
Canonical fixed increment (non-splittable) SplitMix64 engine.
- Splittable64
alias Splittable64 = SplitMixEngine!(staffordMix13, true)
Canonical splittable (specifiable-increment) SplitMix64 engine.
- murmurHash3Mix
alias murmurHash3Mix() = .fmix64!(0xff51afd7ed558ccdUL, 0xc4ceb9fe1a85ec53UL, 33, 33, 33)
- staffordMix01
alias staffordMix01() = .fmix64!(0x7fb5d329728ea185UL, 0x81dadef4bc2dd44dUL, 31, 27, 33)
- staffordMix02
alias staffordMix02() = .fmix64!(0x64dd81482cbd31d7UL, 0xe36aa5c613612997UL, 33, 31, 31)
- staffordMix03
alias staffordMix03() = .fmix64!(0x99bcf6822b23ca35UL, 0x14020a57acced8b7UL, 31, 30, 33)
- staffordMix04
alias staffordMix04() = .fmix64!(0x62a9d9ed799705f5UL, 0xcb24d0a5c88c35b3UL, 33, 28, 32)
- staffordMix05
alias staffordMix05() = .fmix64!(0x79c135c1674b9addUL, 0x54c77c86f6913e45UL, 31, 29, 30)
- staffordMix06
alias staffordMix06() = .fmix64!(0x69b0bc90bd9a8c49UL, 0x3d5e661a2a77868dUL, 31, 27, 30)
- staffordMix07
alias staffordMix07() = .fmix64!(0x16a6ac37883af045UL, 0xcc9c31a4274686a5UL, 30, 26, 32)
- staffordMix08
alias staffordMix08() = .fmix64!(0x294aa62849912f0bUL, 0x0a9ba9c8a5b15117UL, 30, 28, 31)
- staffordMix09
alias staffordMix09() = .fmix64!(0x4cd6944c5cc20b6dUL, 0xfc12c5b19d3259e9UL, 32, 29, 32)
- staffordMix10
alias staffordMix10() = .fmix64!(0xe4c7e495f4c683f5UL, 0xfda871baea35a293UL, 30, 32, 33)
- staffordMix11
alias staffordMix11() = .fmix64!(0x97d461a8b11570d9UL, 0x02271eb7c6c4cd6bUL, 27, 28, 32)
- staffordMix12
alias staffordMix12() = .fmix64!(0x3cd0eb9d47532dfbUL, 0x63660277528772bbUL, 29, 26, 33)
- staffordMix13
alias staffordMix13() = .fmix64!(0xbf58476d1ce4e5b9UL, 0x94d049bb133111ebUL, 30, 27, 31)
- staffordMix14
alias staffordMix14() = .fmix64!(0x4be98134a5976fd3UL, 0x3bc0993a5ad19a13UL, 30, 29, 31)
Well known sets of parameters for fmix64.
Predefined are murmurHash3Mix and staffordMix01 through staffordMix14.
SplitMix generator family.
An n-bit splitmix PRNG has an internal n-bit counter and an n-bit increment. The state is advanced by adding the increment to the counter and output is the counter's value <a href="#fmix64">mixed</a>. The increment remains constant for an instance over its lifetime, so each instance of the PRNG needs to explicitly store its increment only if the split() operation is needed.
The first version of splitmix was described in Fast Splittable Pseudorandom Number Generators (2014) by Guy L. Steele Jr., Doug Lea, and Christine H. Flood. A key selling point of the generator was the ability to split the sequence:
<blockquote> "A conventional linear PRNG object provides a generate method that returns one pseudorandom value and updates the state of the PRNG, but a splittable PRNG object also has a second operation, split, that replaces the original PRNG object with two (seemingly) independent PRNG objects, by creating and returning a new such object and updating the state of the original object. Splittable PRNG objects make it easy to organize the use of pseudorandom numbers in multithreaded programs structured using fork-join parallelism." </blockquote>
However, splitmix is also used as a non-splittable PRNG with a constant increment that does not vary from one instance to the next. This cuts the needed space in half. This module provides predefined fixed-increment SplitMix64 and splittable Splittable64.