使用arc4random不会像我想的那样将图像放置为“随机”

时间:2014-08-15 17:18:47

标签: ios objective-c random arc4random

我希望图片看起来比他们使用此代码更随机:

//placing images on the screen
-(void)PlaceImage {

    RandomImagePosition = arc4random() %1000;
    Image.center = CGPointMake(570,  RandomImagePosition);

    // the higher the number (570) the farther to the right the platforms appear
}

它们出现在不同的位置,但大部分时间都在屏幕顶部。将图像放置在屏幕底部时会有几次。我希望有更多的随机性。

2 个答案:

答案 0 :(得分:3)

使用arc4random_uniform在指定范围内生成随机整数。永远不要使用arc4random mod;这确实是有偏见的,会产生不理想的结果。

如果您对"随机性"还有其他问题。您应该仔细查看如何使用随机值。值得注意的是,人们对"随机"的看法。通常与数学随机完全不同:例如,人们期望"随机"硬币翻转在头部和尾部之间切换的频率比实际随机产生的频率要高得多。因此,为了使感知随机的东西,您可能必须略微捏造输出(例如,以减少值重复两次的机会)。

答案 1 :(得分:1)

您可能遇到模偏差,应该使用arc4_random_uniform(700)。来自man arc4random

 arc4random_uniform() will return a uniformly distributed random number
 less than upper_bound.  arc4random_uniform() is recommended over con-
 structions like ``arc4random() % upper_bound'' as it avoids "modulo bias"
 when the upper bound is not a power of two.