当前位置:  开发笔记 > 编程语言 > 正文

Objective-C:模偏差

如何解决《Objective-C:模偏差》经验,为你挑选了2个好方法。

使用:

value = arc4random() % x

如何避免或消除模偏差?

至少根据维基百科的说法,在编程机会游戏时,模偏差是一个问题.



1> 小智..:

使用arc4random_uniform(x).这适合你.

根据手册页:

arc4random_uniform()将返回一个小于的均匀分布的随机数upper_bound.arc4random_uniform()建议使用结构,arc4random() % upper_bound因为当上限不是2的幂时,它避免了"模偏差".


这个答案比接受的答案要好.

2> Can Berk Güd..:

arc4random返回一个32位无符号整数(0到2 32 -1).

对于足够小的x,可能没有明显的模偏差.但是,如果您想要确定,请执行以下操作:

Y = 2 p,其中2 P-1 p

val = arc4random() % y;
while(val >= x)
    val = arc4random() % y;


我碰巧遇到了相同的任务,可以在[src/sys/dev/rnd.c]的OpenBSD`arc4random_uniform()`中找到C实现(http://www.openbsd.org/cgi-bin/cvsweb/src /sys/dev/rnd.c?rev=1.140;content-type=text%2Fplain)
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有