Excel VBA理解随机化语句

Excel VBA理解随机化语句,excel,vba,Excel,Vba,我正在开发一个小程序,它生成标准的正态分布的数字,给定一个均匀分布的随机数源。因此,我需要生成一组随机数。我决定使用RND函数,因为程序应该尽可能快(因此我不想使用额外的种子函数) 通过一些研究,我发现RND函数在使用之前的语句时更有效。我不理解可选数字参数的描述。我知道如果我不给随机函数任何参数,它将使用系统计时器值作为新的种子值 有人能给我解释一下这个可选的数字到底在用这个函数做什么吗?使用Randomize(1)和Randomize(99)或者甚至Randomize(“blablabla”

我正在开发一个小程序,它生成标准的正态分布的数字,给定一个均匀分布的随机数源。因此,我需要生成一组随机数。我决定使用RND函数,因为程序应该尽可能快(因此我不想使用额外的种子函数)

通过一些研究,我发现RND函数在使用之前的语句时更有效。我不理解可选数字参数的描述。我知道如果我不给随机函数任何参数,它将使用系统计时器值作为新的种子值

有人能给我解释一下这个可选的数字到底在用这个函数做什么吗?使用
Randomize(1)
Randomize(99)
或者甚至
Randomize(“blablabla”)
之间有区别吗?我想了解这个可选输入数字背后的原理。谢谢大家!


引用一个非常类似的问题

大多数是基于算法构建的(sic),涉及某种递归方法,从一个由称为“种子”的输入确定的基值开始。大多数统计软件(R、Python、Stata等)中的默认PRNG是MT19937,如中所述。这是一个复杂的算法,所以如果你想知道它的详细工作原理,最好阅读关于它的文章。在这个特定的算法中,存在度$n$的递归关系,并且您的输入种子是向量的初始集x0,x1,…,xn-1。该算法使用线性递归关系生成:

xn+k = f(xk, xk+1, xk+m, r, A)

其中1种子用于初始化伪随机数生成器。基本上,seed用于生成伪随机数,您可以将其视为生成随机数的起点。若种子在变化,那个么数字的随机性就会增加,这就是为什么默认使用是使用当前系统时间(因为它在不断变化)

从您发布的MSDN文章的评论中:

Randomize使用number初始化Rnd函数的随机数生成器,为其提供一个新的种子值。如果省略数字,系统计时器返回的值将用作新的种子值

因此,如果指定参数,将始终具有相同的种子,从而减少随机性

如果未使用“随机化”,则Rnd函数(无参数)在第一次调用时使用与种子相同的数字,然后使用最后生成的数字作为种子值

这里我们使用最后生成的随机数作为种子,这增加了随机性