具有N个头部概率的硬币鳍状肢

目标是翻转加权硬币,使其在N%的时间内返回头部。

我不是完全难过的。 我可以这样做:

probability = 0.75 # chance of getting heads as decimal num_heads_cases = (100.to_f * probability).to_i cases = num_heads_cases.times.map { :heads }.concat( (100 - num_heads_cases).times.map { :tails } ) is_flip_result_heads = cases.sample == :heads 

但我在这里张贴,看看是否有一些核心的ruby / rails方法我忽略了。 我正在寻找类似于以下方法签名的东西:

 def random_bool(probability_of_returning_true=0.5) 

这类似于被标记为重复的问题,但不是重复的; 那个问题询问如何得到一个随机数 ,而这个问题询问如何获得一个 概率随机的布尔值

从“随机数”到“随机布尔”看起来似乎很明显,但显然不是每个人都这样。

 def rb(prob=0.5) rand < prob end 10.times.map { rb(0.8) } #=> [true, true, false, false, true, false, true, true, true, true] 100.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/100.0 #=> 0.87 1000.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/1000.0 #=> 0.798 10000.times.reduce(0) { |t,_| t + (rb(0.8) ? 1 : 0) }/10000.0 #=> 0.8003 
 # prob : Probability (Float between 0 and 1) def flip_weighted_coin(prob) (rand < prob) ? :heads : :tails end