Module
拡張乱数 †
何が拡張かは見てくれたら分かると思います。
名前を捻ったのはそのまま答えになるのもどうかと思ったからです。
rnd命令(2.61)と書式をそろえています。
乱数テーブルは以前rnd命令を使ったときの乱数の最大数の指定と異なると自動的に再構築するようになっています。
全ての乱数を出し切ると乱数ポインタ(ランダムポイント)を自動で初期化します。
これによって乱数範囲0〜4を10回のループで取得するとそれぞれ2回づつ同じ乱数が得られるというわけです。
任意のタイミングで乱数ポインタを初期化する命令も提供しています。
アルゴリズムは配列シャッフルと同じです。(というかこっちをあっちに応用した。)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
-
|
|
|
|
|
|
!
|
#module "kz3rnx"
#deffunc rnx_reset
rnxp = brng
return
#deffunc rndex val , int
mref value , 16
mref rng , 1
mref res , 64
if rng <= 0 : res = 1 : goto *@f
if (brng = 0) | (brng ! rng){
dim rnxtbl , rng
repeat rng
rnxtbl.cnt = cnt
loop
rnxp = rng
brng = rng
}
rnd r , rnxp
value = rnxtbl.r
rnxp--
tmp = rnxtbl.r
rnxtbl.r = rnxtbl.rnxp
rnxtbl.rnxp = tmp
if rnxp = 0 : rnxp = rng
res = 0
*@
return
#global
|
1
2
3
4
5
6
7
8
9
10
11
12
|
| #include "rnx.as"
randomize
repeat 3
rndex a , 8
mes a
loop
rnx_reset
repeat 10
rndex a , 5
mes a
loop
stop
|
- もう眠いので続きはまた今度ーー; -- kz3
- 乱数と言えばモンテカルロ法用疑似乱数 -- araran
- ニューメリカルレシピインC(NUMERICAL RECIPES in C)の乱数の章に「モンテカルロ積分」というものがありましたねぇ、内容は理解にいたりませんでしたが;; -- kz3
- とにかく同じパータンが出現しない素晴らしい乱数。としか理解してませんw 数学的になぜそうなるかとか難しすぎ。ただ数学的な理屈は抜きに移植して見るのは面白いかも。 -- araran
- あ、時間無くて、色々と中途半端なくせに、また無責任なこと言ってますね。僕w -- araran
- 改めてニュメリカル(略)を読む気になってきた、が今一番の興味は3Dなんですよねぇ^^;3D凄いですよ、ほんと・・・NEOZCの最新デモもいいですよ、動いてます!;; -- kz3