第8回 前回失敗した擬似乱数の作成と検証用プログラムの作成です。
今回は線形合同法を利用しました。
線形合同法
式
Xn+1 = (A * Xn + B) mod M
前の値にAをかけBを足し、その値をMで割った余りを次の値として繰り返します。
A、B、Mは条件があるようです。
ここでは A=1001、B=9、M=100000としました。
M=10000だと明らかに乱数でない図形が発生します。
擬似乱数の作成コードは定義も含めて5行とシンプル。
<使い方>
RSに初期値を定義
PRND(N)で0~N-1の擬似乱数を作成
検証用プログラム
目的は同じ値が何度で発生するか?
2000回以上を選定し、循環が何回目からの発生か、FORMAT文を使って数値を揃えて表示しています。
(リストの18行目の縦棒はなんでもいいです)
表示結果から判断すると、RSの初期値としては30と41が良さそうです。
追加で30と41を検証したところ、463以内の乱数なら全ての値が発生します。
今回は線形合同法を利用しました。
線形合同法
式
Xn+1 = (A * Xn + B) mod M
前の値にAをかけBを足し、その値をMで割った余りを次の値として繰り返します。
A、B、Mは条件があるようです。
ここでは A=1001、B=9、M=100000としました。
M=10000だと明らかに乱数でない図形が発生します。
擬似乱数の作成コードは定義も含めて5行とシンプル。
<使い方>
RSに初期値を定義
PRND(N)で0~N-1の擬似乱数を作成
検証用プログラム
目的は同じ値が何度で発生するか?
2000回以上を選定し、循環が何回目からの発生か、FORMAT文を使って数値を揃えて表示しています。
(リストの18行目の縦棒はなんでもいいです)
表示結果から判断すると、RSの初期値としては30と41が良さそうです。
追加で30と41を検証したところ、463以内の乱数なら全ての値が発生します。