XorShift

提供:APCC
ナビゲーションに移動 検索に移動

XorShift(えっくすおあしふと)とは乱数生成アルゴリズムの1つである。

内容

いきなりだが、コードを書く。

uint32_t xor(void) {
  static uint32_t y = 2463534242;
  y = y ^ (y << 13); y = y ^ (y >> 17);
  return y = y ^ (y << 5);
}

Cを知らない人のために説明すると、

  1. 値と(値を2の13乗倍)のXORを計算する
  2. 1. で計算した値と(1. で計算した値を2の17乗で割ったもの)のXORを計算する
  3. 2. で計算した値と(2. で計算した値の2の5乗倍)のXORを計算する

というアルゴリズムである。シード値を設定したい場合はxに大きめの適当な数を入れておく。

特徴

  • XorもShiftも一瞬で計算できるので、とても速い。
  • それなりに性質の良い乱数が生成できることが知られている。
  • メモリの消費量が非常に小さい。
  • 上記の5行と実装も非常に小さい

といった理由で、非常にゲームに向いている。[1] メルセンヌ・ツイスタと比べて乱数の品質は少し落ちるが、メルセンヌ・ツイスタと比べてこちらは格段に高速である。

関連項目

  1. 平山 尚、ゲームプログラマになる前に覚えておきたい技術 p773