steven.chen 发表于 2006-4-4 11:03:51

产生随机数的问题。

在VBScript的语言参考手册中有这么一条:
Randomize

Note   To repeat sequences of random numbers, call Rnd with a negative argument immediately before using Randomize with a numeric argument. Using Randomize with the same value for number does not repeat the previous sequence.
即:
注意 :要重复随机数的序列,请在使用数值参数调用 Randomize 之前,立即用负值参数调用 Rnd。使用相同的 number 值的 Randomize 不能重复先前的随机数序列。

我用代码试验:
Randomize(10)
msgbox rnd(10)
产生的是总是第一个产生的随机数,这是不是和上面的不相符?
而用
Randomize‘ 这是系统时间产生的随机数
msgbox rnd(10)
产生的是随机数
而对于第一句不是太理解,是不是说
msgbox rnd(-1)
Randomize
msgbox rnd(10)
可这样产生的仍然是随机数。
应该怎么理解?

thanks

Horus_Ra 发表于 2006-4-4 13:07:34

公式是:Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
upperbound是最大数,lowerbound是最小数

steven.chen 发表于 2006-4-4 13:43:46

对不起,我不是问的产生随机数的公式,这个公式我知道,我是想问一下VBScript的语言参考手册中的note的一个问题,any way,thank you all the same。

steven.chen 发表于 2006-4-4 14:54:45

如果换成是循环来看:
x = 0
While x<10
Randomize (10)
msgbox rnd(10)
x = x+1
Wend

这样他就是产生了不同的十个随机数,这样好像就证明了:使用相同的 number 值的 Randomize 不能重复先前的随机数序列。
但是新的问题是:当我在这次循环完成后,重新调用这个函数,结果得到的十个随机数又是和上一次产生的10个随机数是同样的,为什么会是这样的结果?why?

steven.chen 发表于 2006-4-4 15:03:55

Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value.
是不是系统在第一次运行时产生了一个被用来计算随机数的种子,而在之后的运算中没有产生新的种子,所以之后的随机数都一样(这样的情况和没有产生新种子的情况是一样的),那使用相同的 number 值的 Randomize在每次不同的运行时会产生不同的随机数呢?

steven.chen 发表于 2006-4-4 15:11:02

While x<10
rnd(-1)
Randomize (10)
msgbox rnd(10)
x = x+1
Wend

通过这样的代码运行出来是10个一样的数,这好像就说明了:要重复随机数的序列,请在使用数值参数调用 Randomize 之前,立即用负值参数调用 Rnd。这一条。

steven.chen 发表于 2006-4-4 15:11:36

谢谢各位,最初的问题搞清楚了。

mjji23 发表于 2007-8-14 13:08:03

其实应该多谢你才对

17800455 发表于 2010-8-26 09:00:35

回复 2# 的帖子

标准答案。
页: [1]
查看完整版本: 产生随机数的问题。