You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Alex D Herbert (JIRA)" <ji...@apache.org> on 2019/03/19 15:10:00 UTC

[jira] [Issue Comment Deleted] (RNG-82) XorShift1024StarPhi generator

     [ https://issues.apache.org/jira/browse/RNG-82?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alex D Herbert updated RNG-82:
------------------------------
    Comment: was deleted

(was: The new {{XorShift1024StarPhi}} is a simple variant of the original {{XorShift1024Star}}. The internal state is maintained identically. The final output is a long multiplied by a factor. Only the factor is different between the two algorithms.

An experiment was performed to determine if the output from the two generators with the same seed was correlated.

XorComposite: A composite of two rngs using the xor operation:
{code:java}
return new IntProvider() {
      @Override
      public int next() {
          return rng1.nextInt() ^ rng2.nextInt();
      }
}; 
{code}
SerialComposite: A composite of two rngs using alternating output:
{code:java}
return new IntProvider() {
      private int flip;

      @Override
      public int next() {
          return ((flip++ & 1) == 0) ? rng1.nextInt() : rng2.nextInt();
      }
}; 
{code}
Tests were performed using:
||Name||rng1||rng2||Method||Notes||
|XorShiftXorComposite|XorShift1024Star|XorShift1024StarPhi|XorComposite|Same seed|
|XorShiftSerialComposite|XorShift1024Star|XorShift1024StarPhi|SerialComposite|Same seed|
|SplitXorComposite|XorShift1024Star|TwoCmres|XorComposite|Control|

The same seed was used for variants of the {{XorShift1024}} algorithm to ensure the internal state of each was synchronised.

The final composite is a control to show that two unrelated generators can be effectively combined.

 

The composites were run though the test suites of *DieHarder* and *BigCrush* and failures counted:
||Name||DieHarder||BigCrush||
|XorShiftXorComposite|89, 105, 104, 104, 105, 106, 105, 104, 88, 105, 89|0, 3, 0|
|XorShiftSerialComposite|27, 23, 22, 24, 25, 23|0, 0, 0|
|SplitXorComposite|0, 0, 0, 0, 0, 0|0, 1, 0|

Note: A lot of results were generated for DieHarder as it was the first composite tested (8 runs). Then 2 other composites were tested using 3 runs. After *BigCrush* showed no problems with 3 runs *DieHarder* was repeated with 3 more runs to verify the result.

*DieHarder* does find a lot of problems with the composites.

I do not know why *BigCrush* is OK.)

> XorShift1024StarPhi generator
> -----------------------------
>
>                 Key: RNG-82
>                 URL: https://issues.apache.org/jira/browse/RNG-82
>             Project: Commons RNG
>          Issue Type: New Feature
>          Components: core, simple
>    Affects Versions: 1.3
>            Reporter: Alex D Herbert
>            Assignee: Alex D Herbert
>            Priority: Major
>             Fix For: 1.3
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> The authors of the algorithm implemented in {{org.apache.commons.rng.core.source64.XorShift1024Star}} have produced a new variant using a different multiplier. The source code is described here:
> [xorshift1024star.c|http://xorshift.di.unimi.it/xorshift1024star.c]
> For clarity the code states:
> {noformat}
>    NOTE: as of 2017-10-08, this generator has a different multiplier (a
>    fixed-point representation of the golden ratio), which eliminates
>    linear dependencies from one of the lowest bits. The previous
>    multiplier was 1181783497276652981 (M_8 in the paper). If you need to
>    tell apart the two generators, you can refer to this generator as
>    xorshift1024φ and to the previous one as xorshift1024*M_8.
> {noformat}
> This can be added as a variant of the current implementation:
> class = XorShift1024StarPhi
>  RandomSource = XOR_SHIFT_1024_S_PHI



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)