[
https://issues.apache.org/jira/browse/RNG-94?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16897324#comment-16897324
]
Alex D Herbert commented on RNG-94:
-----------------------------------
Following from SplitMix we could use the Mix suffix for all mix based
generators that use a Weyl sequence as the underlying source of randomness.
E.g. The classes and enum names:
{noformat}
AbstractMix
RrmxmxMix -> RRMXMX_MIX
RrxmrrxmsxMix -> RRXMRRXMSX_MIX
{noformat}
The AbstractMix would have a state and increment. It would define an abstract
{{mix}} method that accepts the current state to be mixed for the output of
{{next}}.
> Add RotateRotateMultiplyXorMultiplyXor generator
> ------------------------------------------------
>
> Key: RNG-94
> URL: https://issues.apache.org/jira/browse/RNG-94
> Project: Commons RNG
> Issue Type: New Feature
> Components: core
> Affects Versions: 1.3
> Reporter: Alex D Herbert
> Assignee: Alex D Herbert
> Priority: Minor
>
> The generators described on the MostlyMangling website [Better, stronger
> mixer and a test
> procedure|http://mostlymangling.blogspot.com/2019/01/better-stronger-mixer-and-test-procedure.html]
> show better output than the Stafford variant 13 mixing function used in
> SplitMix or the murmur hash 3 mixing function used in ThreadLocalRandom for a
> 64-bit based mixer function.
> {code}
> static inline uint64_t ror64(uint64_t v, int r) {
> return (v >> r) | (v << (64 - r));
> }
> // Old mixer, my rrmxmx
> uint64_t rrmxmx(uint64_t v) {
> v ^= ror64(v, 49) ^ ror64(v, 24);
> v *= 0x9FB21C651E98DF25L;
> v ^= v >> 28;
> v *= 0x9FB21C651E98DF25L;
> return v ^ v >> 28;
> }
> // New mixer, "rrxmrrxmsx_0", this is much more well behaved although
> // slightly slower doing 2 rotations instead of the shift in the middle
> // of rrmxmx.
> // With a unit counter starting at 0, it has passed 128 TB of
> // PractRand 0.94 -tf 2 without anomalies found past 2 TB.
> uint64_t rrxmrrxmsx_0(uint64_t v) {
> v ^= ror64(v, 25) ^ ror64(v, 50);
> v *= 0xA24BAED4963EE407UL;
> v ^= ror64(v, 24) ^ ror64(v, 49);
> v *= 9FB21C651E98DF25UL;
> return v ^ v >> 28;
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)