【发布时间】:2016-07-12 17:11:23
【问题描述】:
所以也许这是多余的,也许这就像问为什么大多数人天生就有 5 个手指,最后的简短回答总是:因为它就是这样,它只是工作,但我讨厌这个答案,该死我想要了解 VBA 中的 Rnd() 函数是如何工作的。
Ms Office Excel 的 MSDN 说 RND 定义为:
Rnd[(number)] 'The optional number argument is a Single or any valid numeric expression.
继续说
"number的值决定了Rnd如何生成随机数:对于 任何给定的初始种子,都会生成相同的数列,因为 对 Rnd 函数的每次连续调用都使用前一个数字作为 序列中下一个数字的种子。”
接下来是:
要生成给定范围内的随机整数,请使用以下公式:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
例如:Dim MyValue
MyValue = Int((6 * Rnd) + 1) ' Generate random value between 1 and 6.
但它是如何工作的?这些数字是从哪里来的?为什么6 * Rnd + 1 会得到一个介于 1 和 6 之间的随机数,而 6 * Rnd + 5 会得到一个介于 5 和 10 之间的数字?
此外,如果 VBA 的创建者很清楚使用什么公式可以成功地将其缩小到特定范围,为什么不让 RND 函数带有可选的 Ubound 和 Lbound 参数?我不可能是唯一一个研究这个公式的人,这到底是什么?
归根结底,它当然可以满足我的任何伪随机数需求,也许我正在寻找一匹礼物马,但仍然如此!
编辑
我突然想到这个问题可能基于数学本身。如果你取一个小整数,你会应用什么函数来使该整数适合指定范围..那么任何人都可以解释这个公式是如何工作的吗?
【问题讨论】:
-
给出的原始公式中的常数“+1”需要为 0.5(0.499999 重复,但 w/e) 怎么还没人提到这个呢?还是证明我错了?使用 +1 可能会导致您超出上限。