首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vbscipt随机生成器

Vbscipt随机生成器
EN

Stack Overflow用户
提问于 2014-10-08 01:41:59
回答 1查看 484关注 0票数 0

所以我有以下代码,

代码语言:javascript
复制
max=2000
min=1
Randomize

cntr = 0

StartTime = Timer
Position = 1
set objFile = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\...\listfile4.csv",2,true)

do while cntr <> 1
    cntr = 0
    Answer = 1
    Lottery = 2
    do while Answer <> Lottery 
        Answer = (Int((max-min+1)*Rnd+min))
        Lottery = (Int((max-min+1)*Rnd+min))
        cntr = cntr + 1
    loop
    objFile.WriteLine(cstr(Position & "," & cntr & "," & Answer & "," & Lottery & "," & vbtab))
    Position = Position + 1
loop

msgbox (Timer - StartTime)/60

基本上我选择了两个pseudoRandom数字

代码语言:javascript
复制
        Answer = (Int((max-min+1)*Rnd+min))
        Lottery = (Int((max-min+1)*Rnd+min))

并尝试查看它们在第一次尝试时匹配的频率。

因此,cntr是两个数字匹配所需的尝试次数的计数。我循环该循环,直到它在第一次尝试时匹配。

max <2000时,它最终会在第一次尝试时匹配,导致程序结束。

然而,当max >= 2000时,它似乎永远不会结束。对于2000年,它将产生的最低cntr2

奇怪的是,我最初设置了max = 10000。如果有足够大的测试集(可以小到1000),则最小cntr始终为51,最大cntr始终为57966

为什么会出现这种模式,比如为什么51是最小的?如何在某些情况下将最小cntr设置为1?我希望程序做一些事情,如果他们在第一次尝试匹配。但是,如果我的最大值大于1999,那么它们在第一次尝试时就永远不会匹配。这是一个问题。

EN

回答 1

Stack Overflow用户

发布于 2014-10-16 08:04:09

首先,你并不是真的在寻找一行中的两个随机数相等,而是2的两个随机数。你的内部循环必须找到连续两次重复的数字。

VBscript使用公式计算数字-没有真正随机的东西。这就是为什么你需要使用随机化,以便你选择一个新的随机数字序列。http://support.microsoft.com/kb/231847为您提供完整的详细信息

如果这些数字真的是随机的(比如抛硬币、掷骰子、抽牌-忽略人为的刻意操纵),那么在你的脚本中,两个数字完全相同的几率应该是2000:1。找到重复的对也只是2000:1,因为生成的数字将是随机独立的。但是使用公式,您创建的是一个数字序列,您得到的下一个数字取决于前一个数字。由于从浮点数乘以整数(降低精度)而导致的舍入,这些数字看起来是随机的,并且随机化在最终是一个非常长但单一的数字列表中创建了一个不同的起点。

如果您想进一步了解,对脚本进行一些调整可能会有所帮助:

  1. 包含一个totalcount,因此您可以了解在到达第一个重复对之前需要多少次循环
  2. 将rnd值存储在一个变量中并输出它们,例如r1=rnd r2=rnd,然后在您的答案和彩票计算中使用r1和r2。输出这些数字,您将看到舍入效果如何
  3. 尝试在不使用随机化或使用随机化X(您选择的某个数字)的情况下运行代码,但具有不同的最大值。您将开始看到rnd调用的总数,以查找重复的对,并根据四舍五入上下变化。但是,随着最大值的增加,总数量将大量增加。你会发现一些例外-它毕竟是伪随机的,但通常你会减少重复对的概率,因为你减少了一个固定的最大值的舍入influence.
  4. With,放回随机数(无数字)。看看你得到的结果,你会发现相同的数字对出现了多次。
  5. 只有一个循环,所以你计算的是离一个重复的数字还有多长时间,而不是一对重复的数字。你会发现这更接近于你所期望的statistically.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26241948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档