我需要做一个遵循一定结果概率的硬币翻转。例如,掷硬币有 67% 的机会出现正面,83% 的机会出现反面等。
我设法通过在等效分布中填充 100 个数组,然后随机选择一项来获得我想要的true
结果false
。有什么更优雅的方法呢?
我需要做一个遵循一定结果概率的硬币翻转。例如,掷硬币有 67% 的机会出现正面,83% 的机会出现反面等。
我设法通过在等效分布中填充 100 个数组,然后随机选择一项来获得我想要的true
结果false
。有什么更优雅的方法呢?
rand < 0.67
rand < 0.83
将true
分别以 67% 和 83% 的概率给出 - 因为一个统一选择的随机数x
(0 <= x < 1
例如由 返回Kernel#rand
)将有 67% 的可能性落在该段中0 <= x < 0.67
。
Random#rand(max)
(和Kernel#rand(max)
):
当 max 为 Integer [大于或等于 1] 时,rand 返回一个大于或等于 0 且小于 max 的随机整数。
所以:
p = rand(100)
return p < 83 # ie. true for heads
从理论上讲,这可以像数组分布方法一样“精确”。