[
https://issues.apache.org/jira/browse/RNG-82?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16793487#comment-16793487
]
Alex D Herbert commented on RNG-82:
-----------------------------------
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)