XorShiftとは
疑似乱数生成方法の一つにXorshiftというものがあります。
wikipediaによると、Xorshiftとは、演算が排他的論理和とビットシフトのみであるため高速である、という特徴があります。
Xorshiftによる乱数生成をC#で書いてみました。
C#の実装例
public class Xorshift
{
// 内部メモリ
private UInt32 x;
private UInt32 y;
private UInt32 z;
private UInt32 w;
public Xorshift() : this((UInt32)DateTime.Now.Ticks) { }
public Xorshift(UInt32 seed)
{
x = 123456789U;
y = 362436069U;
z = 521288629U;
w = seed;
}
public UInt32 Next()
{
UInt32 t = x ^ (x << 11);
x = y;
y = z;
z = w;
w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
return w;
}
}
アルゴリズム
Xorshiftのアルゴリズムはシンプルで、4つの内部メモリの値ををぐるぐると回しながら、ビットシフト(>>演算子と<<演算子)と排他的論理和(^演算子)のみを繰り返します。 比較的高速な乱数生成が可能なアルゴリズムです。 乱数生成を繰り返す場合、再び同じ数が出てくるまでの周期は2128-1となり、そこそこの高精度です。
上の実装例では、初期のシード値(x,y,z)について、wikipediaの値をそのまま流用しています。
ですが実際は4つの内部メモリが0にならなければ問題ないようです。
コメントを書く