概要

MT19937はメルセンヌ・ツイスタ方式による擬似乱数生成ライブラリです。

このページでは、MT19937の使い方を簡単に紹介します。

なお、仕様入門の第12章「」でも紹介しているので、そちらも参照してください。

ロード

MT19937のライセンスはパブリックドメインなので、乱数を使用するプログラムの場合は積極的に利用し、プログラムに含めて配布することが可能です。ANSI Common Lispでの乱数は生成方法までは指定されていないので、MT19937を使用せずにrandom関数などを利用すると、処理系によって乱数の精度が異なるため、乱数を使用する場合はあまり深く考えずにMT19937で代用してもいいと思います。

(asdf:load-system :mt19937)
; => 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)

整数を指定すると整数の乱数が、小数点数を指定すると、対応する型の乱数が生成されます。


Copyright (C) 2017- Satoshi Yamamoto (Shoty).
Some rights reserved.