xorshiftとは、高速で高品質で簡単に乱数を生成するアルゴリズムである。 xorshiftにはいくつかの派生版が存在する
- xorwow : ワイルの一様分布定理に基づいて、単純な定数加算をすることで周期を増やす
- ワイルの一様分布定理とは、無理数に1 ~ ∞まで乗算した数列は、mod 1において一様に分布するというもの。つまり、無理数を乗算して加算しておけば、一様に分布するようになるだろうってことだと思う
- xorshift* : 非線形変換として、不可逆な定数を乗算することで、ランダム性を向上する
- 不可逆な乗算とは、つまりulongに収まらないことが容易に想像できるほど大きな数値を乗算することで桁落ちが発生し、不可逆な変換をすることだと思う
- xorshift+ : 非線形変換として、乗算ではなくて加算を用いる手法
CPUで使うならxorshift+ (Google Chromeが2015年に採用)
GPUで使うならxorwow (CUDA Toolkit : cuRAND Libraryが採用)
https://github.com/a3geek/Xorshifts.git?path=Packages/com.a3geek.xorshifts
CPU
- xorshift
- xorshift+
- xorshift*
- xorwow
GPU
- xorwow
xorshift : G.Marsaglia, Xorshift RNGs, Journal of Statistical Software vol.8-14, 2003.
xorshift+ : S.Vigna, Further scramblings of Marsaglia’s xorshift generators, 2014.
Wikipedia : Xorshift (WikipediaとPaperとで、実装が違ったのだが、理由が分からなかったのでWikipediaは参考程度にして、基本実装はPaperに準拠した)
xorshiftについて、その他の派生や実装について
xoshiro / xoroshiro generators and the PRNG shootout
もっと新しいアルゴリズム : PCG
PCG, A Family of Better Random Number Generators