的具体例子

我需要生成0和2之间,包括端点的随机数。 (或选择随机-1之间,0和1)。

在幼稚的方法将是这样做rand() mod 3其中rand()返回一个整数。这种方法将不产生统计学上的随机数,除非结合rand()的上不互质(和下界0)。

例如,假设兰特()返回的2位(从0到3,包括端值),则弹性模量将映射:

0 - > 0,点击 1 - > 1,点击 2 - > 2,点击 3 - > 0

此歪斜朝向0显然是要少得多,如果更多的比特将被返回,但无论如何,偏斜将保持。

通用问题

是否有生成0和n-1(含),其中n是互质到2之间均匀分布的随机数的方法吗?

有帮助吗?

解决方案

一个常用的方法是丢弃的随机值的最后一个完整周期的上方,并且只要求一个新的随机数。

其他提示

这可能有助于选择你兰特()的上限为k * n,其中k是整数。这样的结果将均匀分布提供兰特()是一个良好的随机生成器。

如果这是不可能的,以减少上界,可以挑选ķ使K * n为尽可能靠近兰特()上限尽可能并丢弃高于此数的结果再次尝试。

请参阅我的回答到类似的问题。

基本上,使用RNG并丢弃一切上述N-并再次尝试。为了优化,可以使用MOD,并丢弃一切上述N *地板(MAX / N)

通用的答案:你需要使用的不仅仅是2位数的多。

我的经验法则是生成浮点值, X ,0.0 <= X <1.0,乘以3和截断。应该让你值的范围在0,1和2依赖于比特的数量较多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top