MT19937: メルセンヌ・ツイスタ法による擬似乱数生成ライブラリ

概要

MT19937はメルセンヌ・ツイスタ方式による擬似乱数生成ライブラリです。
このページでは、MT19937の使い方を簡単に紹介します。
なお、仕様入門の第12章「」でも紹介しているので、そちらも参照してください。

ロード

MT19937のライセンスはパブリックドメインなので、乱数を使用するプログラムの場合は積極的に利用し、プログラムに含めて配布することが可能です。ANSI Common Lispでの乱数は生成方法までは指定されていないので、MT19937を使用せずにrandom関数などを利用すると、処理系によって乱数の精度が異なるため、乱数を使用する場合はあまり深く考えずにMT19937で代用してもいいと思います。
ASDFでロードすることもできますが、ファイルは一つだけなので、mt19937.lispを直接自分のプログラムに含めて使う方が便利かもしれません。(ASDFの:componentsにファイルを記述しておけばロードできます。)
(load "mt19937.lisp")
; => T

擬似乱数の発生: random関数

擬似乱数の発生にMT19937を使用する場合は、ANSI Common Lisp標準のrandom関数は使わなくなるので、MT19937のrandom関数でシャドウしてしまっても構いません。
(shadowing-import 'mt19937:random)
; => T
これで、random関数はcl:randomではなくmt19937:randomを指すことになります。
(symbol-package 'random)
; => #<PACKAGE MT19937>
MT19937の使い方は簡単で、random関数に数を渡すだけです。
(loop repeat 10 collect (random 10))
; => (2 2 4 5 4 1 9 5 8 3)

(loop repeat 10 collect (random 1.0d0))
; => (0.41556272272148287d0 0.6125738892538246d0 0.8418126553359213d0
;     0.5055894446438118d0 0.6784619950185145d0 0.036393315899921896d0
;     0.6252975183418072d0 0.9937314578694818d0 0.04158924615444981d0
;     0.6326253893666012d0)
整数を指定すると整数の乱数が、小数点数を指定すると、対応する型の乱数が生成されます。

0 件のコメント :

コメントを投稿