gpt4 book ai didi

vba - VBA rand 如何使用上限和下限生成随机数?

转载 作者:行者123 更新时间:2023-12-02 13:11:37 26 4
gpt4 key购买 nike

所以也许这是多余的,也许这就像问为什么大多数人生来就有 5 个手指,最后的简短答案总是:因为事情就是这样,而且它就是这样,但我讨厌这个答案,而且我想要了解 VBA 中的 Rnd() 函数如何工作。

Ms Office Excel 的 MSDN 表示 RND 定义为:

Rnd[(number)] '可选的数字参数是 Single 或任何有效的数字表达式。

接着说

"The value of number determines how Rnd generates a random number: For any given initial seed, the same number sequence is generated because each successive call to the Rnd function uses the previous number as a seed for the next number in the sequence."

接下来是:

To produce random integers in a given range, use this formula:

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

例如:
调暗我的值
MyValue = Int((6 * Rnd) + 1) ' 生成 1 到 6 之间的随机值。

但是这是如何运作的呢?这些数字从哪里来?为什么 6 * Rnd + 1 会得到 1 到 6 之间的随机数,而 6 * Rnd + 5 会得到 5 到 10 之间的随机数?

此外,如果 VBA 的创建者很清楚使用什么公式可以成功地将其缩小到特定范围,那么为什么不让 RND 函数附带可选的 Ubound 和 Lbound 参数呢?我不可能是唯一一个看到这个公式的人,那到底是什么?

归根结底,它当然可以满足我的任何伪随机数需求,也许我正在寻找礼物马,但仍然如此!

<小时/>

编辑

<小时/>

我觉得这个问题可能是基于数学本身。如果你取一个小整数,你会应用什么函数来使该整数适合指定的范围..那么有人可以解释这个公式是如何工作的吗?

最佳答案

以下是分步指南:

  1. Rnd给出 0 到 < 1 之间的随机小数
  2. 6 * Rnd给出 0 到 < 6 之间的随机小数
  3. Int(6 * Rnd)将其向下舍入,这样您就可以得到 0 到 5 之间的随机值

生成介于下限和上限之间的随机数是很常见的。 Excel 确实有 RANDBETWEEN函数来做到这一点:

Value = WorksheetFunction.RandBetween(1, 6)
<小时/>

编辑:现在让我们将其放入 Lbound 中和Ubound (假设两者都是整数和 Lbound < Ubound )

首先,定义:

n = ubound - lbound

接下来我们稍微重写一下MSDN公式:

   Int((ubound - lbound + 1) * Rnd + lbound)
== Int((ubound - lbound + 1) * Rnd) + lbound
== Int(((n + 1) * Rnd) + lbound

从#3,我们知道Int(((n + 1) * Rnd)给出 0 到 n 之间的随机整数.因此,当您将该随机数添加到下限时,您会得到一个介于下限和上限之间的数字;

   Int(((n + 1) * Rnd) + lbound
== 0...n + lbound
== lbound...ubound

关于vba - VBA rand 如何使用上限和下限生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com