0

我需要做一个遵循一定结果概率的硬币翻转。例如,掷硬币有 67% 的机会出现正面,83% 的机会出现反面等。

我设法通过在等效分布中填充 100 个数组,然后随机选择一项来获得我想要的true结果false。有什么更优雅的方法呢?

4

2 回答 2

5
rand < 0.67
rand < 0.83

true分别以 67% 和 83% 的概率给出 - 因为一个统一选择的随机数x0 <= x < 1例如由 返回Kernel#rand)将有 67% 的可能性落在该段中0 <= x < 0.67

于 2016-02-01T01:18:19.253 回答
3

Random#rand(max)(和Kernel#rand(max)):

当 max 为 Integer [大于或等于 1] 时,rand 返回一个大于或等于 0 且小于 max 的随机整数。

所以:

p = rand(100)
return p < 83  # ie. true for heads

从理论上讲,这可以像数组分布方法一样“精确”。

于 2016-02-01T01:17:44.113 回答