乱数:メルセンヌツイスター

参考にさせていただいたページ。
http://sicp.g.hatena.ne.jp/hyuki/20060503/mt


systime使っているけどメルセンヌツイスターになっているのだろうか?
僕にはよーわかりません。

gosh> (use math.mt-random)
#<undef>
gosh> (define mt (make <mersenne-twister> :seed (sys-time)))
mt
gosh> (mt-random-integer mt 1000)
430
gosh> (mt-random-integer mt 1000)
39

思ったよりずっとあっさり出来てしまった。

ついでに剰余も

gosh> (modulo (mt-random-integer mt 100) 24)
15
gosh> (modulo (mt-random-integer mt 100) 24)
0
gosh> (modulo (mt-random-integer mt 100) 24)
19

考えてみれば剰余はいらないことに気がつく(Cの癖が出てしまった)。

gosh> (modulo (mt-random-integer mt 100) 24)

とするぐらいなら

gosh> (mt-random-integer mt 24)

とすればいいのでした。