- - PR -
Rnd関数に関して
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-05-28 20:32
Vb6.0 Rnd関数に関して質問があります。
MSDNを見ると 初期シード値が変わらない限り、一連の Rnd 関数が返す乱数系列は同じになります。これは、連続する Rnd 関数が乱数系列の中の直前に生成された乱数をシード値として、次の乱数をそれぞれ生成するためです。 と書かれていますが、 Call Randomize(1) Dim value As Integer value = CInt(Int((6 * Rnd()) + 1)) MsgBox value 以下のコードを数回ループ実行 毎回 違う値が返ってきます。 Rndを使用して同じ乱数パターンを発生できないのでしょうか? | ||||||||||||
|
投稿日時: 2008-05-28 22:09
リファレンスマニュアルは、今はちょっと VBScript のほうしか見つけられなかったのですが、たぶん VBScript でも仕様は同じだと思いますが、 http://msdn.microsoft.com/ja-jp/library/cc392461.aspx の中の、
に該当することだろうと思います。 たぶん、
のようにすれば毎回同じパターンになるでしょう。 乱数の初期化は Randomize でやるというよりも、Rnd の引数に負の値を指定してやる、というのが本来の初期化であり、Randomize がオマケ的な存在なのだろうと思います。独立したステートメントとしてわざわざ存在している Randomize がとてもそんなふうには見えませんけど。 なお、余談ですが、VB の Rnd/Randomize の仕様は30年以上前のものを引きずっているため、とても難解です。再現性を重視するならば、Rnd/Randomize は一切使わずに、自前の擬似乱数のプログラムでやったほうが良いかもしれません。 | ||||||||||||
|
投稿日時: 2008-05-29 00:23
unibon様
ありがとうございます。 おっしゃる方法で乱数発生できました。 |
1