我遇到随机功能问题。我有一个功能设置:
(define random-abcd
(cond [(equal? (random 4) 0) 'A]
[(equal? (random 4) 1) 'B]
[(equal? (random 4) 2) 'C]
[else 'D]
))
然而,当我跑步时,D的出现频率比任何其他选择都要高。似乎[else ...]代码中的任何内容都比其他选择发生得更多,这意味着它不会以相同的概率进行选择。有没有办法解决这个问题?
答案 0 :(得分:4)
random
函数运行正常,但您的代码错误。你想要这个:
(define random-abcd
(let ([n (random 4)])
(cond [(equal? n 0) 'A]
[(equal? n 1) 'B]
[(equal? n 2) 'C]
[else 'D])))
在原始示例中,您为每次比较生成了一个新的随机数。这个似乎就好像不应该影响分发,但确实如此。
在您的原始表述中,第二种情况要求第一种情况为假和第二种情况属实,给出3/4 * 1/4
或3/16
的实际概率。第三种情况的概率为13/16 * 1/4
或13/64
。对于相等分布,所有情况都应该有1/4
的概率,并且此错误会使整个值集偏斜。