<<展開

xorshift+

概要

xorshift+はxorshiftを元に他手法を参考に改善したもの.XSAddの検討時には低いビット列に乱数性が見られなかったが、xorshift+にすることで解決.
Facebookシェア Twitterツイート LINEで送る このエントリーをはてなブックマークに追加
この章を学ぶ前に必要な知識
0
条件
  • シードを入力値として必要
効果
  • 非線形な処理を含んだ擬似乱数生成
ポイント
  • xorshiftの改善

解 説

xorshift+はxorshiftを元に他手法を参考に改善したもの.XSAddの検討時には低いビット列に乱数性が見られなかったが、xorshift+にすることで解決. 以下のような処理を行う.
xorshift+について
C++
1
2
3
4
5
6
7
8
unsigned int xorshift128p(void) {
    uint64_t x = s[0];
    uint64_t const y = s[1];
    s[0] = y;
    x ^= x << 23; // a
    s[1] = x ^ y ^ (x >> 17) ^ (y >> 26); // b, c
    return s[1] + y;
}
Wikipediaより引用 xorshift+の生成アルゴリズム.
xorshiftに関してはリンクを確認ください. 非常に高速ですが、非線形処理がないため、いくらかの統計テストにパスしておりません. xorshift+においてはBigCrushのテストをパスすることができます.
xorshift
この章を学んで新たに学べる
Comments

Reasons
>>隠す

知識: xorshift
xorshiftは、近年発表されたビット演算のみで非常に高速に長期的な周期の乱数を得ることができる擬似乱数生成アルゴリズムです.しかし乱数を評価する統計的なテストに幾らか落ちており、xorshiftは乱数として信用できないとする声もあります.複数の発展系がありGoogleChromeでも発展系のxorshift+が使用されます.乱数は暗号学的安全性は保証されません.