擬似乱数の生成方法

乱数の仕様・ランダムな行動 -> 擬似乱数の生成方法


実際に解析はしていませんが、ゲーム内と同じく変化する疑似乱数アルゴリズムの説明をします。
わりと専門的なので分からない用語はググって理解してください。

乱数生成に使う配列・計算

配列

Rand1・Rand2

それぞれ乱数1・乱数2。各8ビットずつ格納できる。

p4~p6

直前の乱数ビット。乱数1の一部のみが計算に使われる。

c1~c16

現在の乱数ビット。必要に応じてビットを取り出し計算する。

n1~16

次に来る乱数ビット。計算結果の格納及びビットを取り出して計算するのに使われる。

計算

¬(否定、NOT)

後に来るビットが1なら0を、0なら1を返す。

f(x1, x2, ... ,xn)

ここでは括弧内の全てのビットの排他的論理和(XOR)を示す。
順序や分配に関係なく同じ結果が出る。

配列を図で表したもの
random1.jpg

乱数格納の流れ

1.n1~n3の計算

c7~c14の値を元に計算する
n1 = ¬f(c7, c8, c9, c11, c12)
n2 = f(c7, c9, c10, c12, c13)
n3 = f(c8, c10, c11, c13, c14)

赤い枠は計算に使用する値、青い枠は格納先です

random2.jpg

2.n4~n8の計算

1.で確定した乱数ビットを再び計算に使用する。

n4 = f(n1, c14, c15)

以降式のc,nの値が増加していく

n5 = f(n2, c15, c16)
n6 = f(n3, c16, c1)

random3.jpg

2.内で確定した乱数ビットも同様に計算に使用。

n7 = f(n4, c1, c2)
n8 = f(n5, c2, c3)

黄色い枠は確定したビットです

random4.jpg

3.n9~n13の計算

c4~c8の値をそのまま代入。以上。

random5.jpg

4.n14~n16の計算

直前の乱数を一部利用。c5~c8と計算。

n14 = ¬f(p4, c7, c8)
n15 = f(p4, p5, c7)
n16 = f(p5, p6, c8)

random6.jpg

完了

random7.jpg

  • 最終更新:2017-04-28 00:58:51

このWIKIを編集するにはパスワード入力が必要です

認証パスワード