上周我必须在VBA进行测试。我必须编码一些"游戏"。这些是规则:
- 选择1至100(1和100)之间的数字
- 呼叫函数随机化
- 生成一个随机数在1到100(包括1和100)之间 ->
Int (100 * Rnd + 1)
- 检查是否随机数=选择的号码。
- 5.1如果为true,则将 1添加到计数器,打印计数器,游戏完成
5.2如果false,请添加 1以计数器,返回步骤3。
我希望您能得到"游戏"的目标。
我将计数器初始化为整数(16位)。我的老师告诉我,柜台可能会溢出。他建议使用长(32位),以便溢出的机会较小。
我告诉他,几乎不可能在柜台上进行32000尝试,因为挑选的数字等于生成的数字是1:100。
。他回答:但仍然有可能。
我的问题:
如果数据类型是整数,则计数器是否可能溢出?如果是,有什么机会?如果没有,我该如何证明它?
为什么这个问题在Stackoverflow上而不是统计信息?
这很简单。因为你们知道幕后的RND功能和VBA,所以统计上的家伙没有。
我过去用来用于文件采样的类似东西,带来一个字节足够(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
从上面的描述中,似乎没有什么可以阻止代码尝试它以前尝试过的数字,因此从理论上讲,这也无济于事,这也可能溢出转到无限