均匀分布的随机数相对素2
-
21-08-2019 - |
题
的具体例子
我需要生成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依赖于比特的数量较多。
不隶属于 StackOverflow