シード値を128bitの二元横ベクトル
、現在の状態から次状態への二元遷移行列を
と置くと、Xorshiftアルゴリズムにより生成される乱数列は
と表される。詳しい証明は省略するが[2]、行列
のOrderが
で表される時、かつその時に限り、任意の0でない
に対し
は全て異なる値となる。
予備的なテストとしては、今周期
について
となることを期待しているため、期待する
が
を満たす最小の
であるかを調べる、というものがある。これは
を
回二乗すれば良いため、乱数列を調べるのと比較すると十分に速く調べられる。
完全なテストとしては、期待する周期
の約数
について
を示せば良い。例えば、
bitのビット列
に対する操作が
x ^= x << a;
x ^= x >> b;
x ^= x << c;
return x;
である場合、
である。但し、
及び
である。
の場合、
及び
を調べれば十分である。
の場合、
が
の倍数であるということに注意すると、
及び
を調べれば十分である。
別の例としては
t = x ^ (x << 11);
x = y; y = z; z = w;
return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
に対しては
のように立式し、
について同様に解く。各変数が32 bitだとすれば
, 64 bitだとすれば
であり、対応する
は以下の表のようになる。
 |
 |
 |
 |
 |
 |
0x0000ffff |
0x00000280fffffd7f |
0x0000000000042f00fffffffffffbd0ff |
0x000000000000000000d3eafc3af14600ffffffffffffffffff2c1503c50eb9ff |
0x00ff00ff |
0x0000ffff0000ffff |
0x00000280fffffd7f00000280fffffd7f |
0x000000000000013540775b48cc32ba00fffffffffffffecabf88a4b733cd45ff |
0x0f0f0f0f |
0x00663d80ff99c27f |
0x00003d30f19cd100ffffc2cf0e632eff |
0x0000000000042f00fffffffffffbd0ff0000000000042f00fffffffffffbd0ff |
0x33333333 |
0x00ff00ff00ff00ff |
0x0000ffff0000ffff0000ffff0000ffff |
0x00000280fffffd7f00000280fffffd7f00000280fffffd7f00000280fffffd7f |
0x55555555 |
0x0f0f0f0f0f0f0f0f |
0x00663d80ff99c27f00663d80ff99c27f |
0x00003d30f19cd100ffffc2cf0e632eff00003d30f19cd100ffffc2cf0e632eff |
|
0x3333333333333333 |
0x00ff00ff00ff00ff00ff00ff00ff00ff |
0x0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff |
|
0x5555555555555555 |
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f |
0x00663d80ff99c27f00663d80ff99c27f00663d80ff99c27f00663d80ff99c27f |
|
|
0x33333333333333333333333333333333 |
0x00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff |
|
|
0x55555555555555555555555555555555 |
0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f |
|
|
|
0x3333333333333333333333333333333333333333333333333333333333333333 |
|
|
|
0x5555555555555555555555555555555555555555555555555555555555555555 |