1 はじめに
C 言語の、0 から RAMD_MAX1 までの
整数の乱数を返す rand() という関数を使って、
例えばサイコロなどのように 1 から まで (
)
の整数をランダムに作り出したい場合、
|
(1) |
とするのが手っ取り早そうであるが、実はこれには問題がある。
以前 (少なくとも一部の rand() の実装では)、
偶数と奇数が交互に生成される仕様になっていて、
例えばサイコロの の場合でも、
1,3,5 のいずれかと 2,4,6 のいずれかが交互に現われてしまうことになる。
これではランダムとは言えないだろう。
これはもちろん rand() の実装自体に問題があるのであるが、
この場合 (1) の代わりに、
|
(2) |
のような方法がよく用いられる。これは、rand() に対し、
|
(3) |
によって
の範囲の実数の乱数 を生成し、
|
(4) |
によって 1 から までの乱数を得る方法である。
今回は、この方法の妥当性について検討してみることにする。
竹野茂治@新潟工科大学
2007年6月22日