球拍随机函数
Racket random function
我在使用随机函数时遇到问题。我在其中设置了一个函数:
(define random-abcd
(cond [(equal? (random 4) 0) 'A]
[(equal? (random 4) 1) 'B]
[(equal? (random 4) 2) 'C]
[else 'D]
))
然而,当我 运行 时,这个 'D 比任何其他选择都更频繁地出现。似乎 [else ...] 代码中的任何内容都比其他选择发生的次数多得多,这意味着它没有以相等的概率进行选择。有什么解决办法吗?
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
,而此错误会扭曲您的整个值集。
我在使用随机函数时遇到问题。我在其中设置了一个函数:
(define random-abcd
(cond [(equal? (random 4) 0) 'A]
[(equal? (random 4) 1) 'B]
[(equal? (random 4) 2) 'C]
[else 'D]
))
然而,当我 运行 时,这个 'D 比任何其他选择都更频繁地出现。似乎 [else ...] 代码中的任何内容都比其他选择发生的次数多得多,这意味着它没有以相等的概率进行选择。有什么解决办法吗?
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
,而此错误会扭曲您的整个值集。