[C#] Xorshiftの実装

[C#] Xorshiftの実装

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にならなければ問題ないようです。

C#カテゴリの最新記事