「XorShift」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「'''XorShift'''(えっくすおあしふと)とは乱数生成アルゴリズムの1つである。 ==内容== いきなりだが、コードを書く。 <pre> uint32_t xo…」) |
(加筆) |
||
10行目: | 10行目: | ||
</pre> | </pre> | ||
Cを知らない人のために説明すると、 | Cを知らない人のために説明すると、 | ||
# 値と(値を2の13乗倍)のXORを計算する | |||
# 1. で計算した値と(1. で計算した値を2の17乗で割ったもの)のXORを計算する | |||
# 2. で計算した値と(2. で計算した値の2の5乗倍)のXORを計算する | |||
というアルゴリズムである。シード値を設定したい場合はxに大きめの適当な数を入れておく。 | というアルゴリズムである。シード値を設定したい場合はxに大きめの適当な数を入れておく。 | ||
==特徴== | ==特徴== | ||
*XorもShiftも一瞬で計算できるので、とても速い。 | |||
*それなりに性質の良い乱数が生成できることが知られている。 | |||
*メモリの消費量が非常に小さい。 | |||
*上記の5行と実装も非常に小さい | |||
といった理由で、非常にゲームに向いている。<ref>平山 尚、ゲームプログラマになる前に覚えておきたい技術 p773</ref> | |||
メルセンヌ・ツイスタと比べて乱数の品質は少し落ちるが、メルセンヌ・ツイスタと比べてこちらは格段に高速である。 | |||
==関連項目== | ==関連項目== | ||
*[[乱数]] | *[[乱数]] |
2022年1月5日 (水) 22:42時点における最新版
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を知らない人のために説明すると、
- 値と(値を2の13乗倍)のXORを計算する
- 1. で計算した値と(1. で計算した値を2の17乗で割ったもの)のXORを計算する
- 2. で計算した値と(2. で計算した値の2の5乗倍)のXORを計算する
というアルゴリズムである。シード値を設定したい場合はxに大きめの適当な数を入れておく。
特徴
- XorもShiftも一瞬で計算できるので、とても速い。
- それなりに性質の良い乱数が生成できることが知られている。
- メモリの消費量が非常に小さい。
- 上記の5行と実装も非常に小さい
といった理由で、非常にゲームに向いている。[1] メルセンヌ・ツイスタと比べて乱数の品質は少し落ちるが、メルセンヌ・ツイスタと比べてこちらは格段に高速である。
関連項目
- ↑ 平山 尚、ゲームプログラマになる前に覚えておきたい技術 p773