VBA 用于计数的整数与长整数尝试检查随机数是否等于在 1 到 100 范围内选择的数字

VBA Integer vs Long for counting tries on check if random number is equal to picked number at a range of 1 to 100

上周我必须在 VBA 参加考试。我不得不编写一些代码 "game"。这些是规则:

  1. 选择一个介于 1 和 100 之间的数字(包括 1 和 100)
  2. 调用函数Randomize
  3. 生成一个介于 1 和 100 之间的随机数(包括 1 和 100)-> Int (100 * Rnd + 1)
  4. 检查随机数是否=选择的数字。
  5. 5.1 如果为真,计数器加+1,打印计数器,游戏结束
    5.2 若为false,计数器加+1,返回步骤3

希望你能达到"game"的目的。

我将计数器初始化为整数(16 位)。我的老师告诉我,计数器可能会溢出。他建议使用Long(32位)这样溢出的机会就小了。

我告诉他,在柜台上尝试达到32000次几乎是不可能的,因为选择的数字等于生成的数字的机会是1:100。

他回复:不过还是可以的。

我的问题:
如果数据类型是整数,计数器是否可能溢出?如果有,机会有多大?如果不是,我该如何证明?

为什么这个问题是在 Whosebug 上而不是在统计上?
这很简单。因为你们知道幕后的 Rnd 函数和 VBA,统计人员却不知道。

从你上面的描述来看,似乎没有什么可以阻止代码尝试它之前已经尝试过的数字,所以理论上 long 没有帮助,它也可能溢出,即这可能会继续到无穷大

我以前用过这样的文件采样,带来的问题是一个字节足够(1-255)吗?

Public dicGeneratedAlready As Scripting.Dictionary

Public Function GENERATE_RANDOM(intFromNumber As Integer) As Integer

Randomize

If dicGeneratedAlready Is Nothing Then Set dicGeneratedAlready = New Scripting.Dictionary

GenerateRand:

GENERATE_RANDOM = Int((Rnd * intFromNumber) + 1)

If dicGeneratedAlready.Exists(CStr(GENERATE_RANDOM)) Then
    GoTo GenerateRand
Else
    dicGeneratedAlready.Add CStr(GENERATE_RANDOM), CStr(GENERATE_RANDOM)
End If

End Function