arc4random随机数发生器

Lin*_*int 4 iphone random xcode objective-c arc4random

int randomNumber = (arc4random() % 83) + 1;
Run Code Online (Sandbox Code Playgroud)

这是产生"最随机"数字的最佳方式吗?或者有更好的方法来生成随机数?

Chr*_*ung 13

当你使用时arc4random,避免使用%线性同余生成器(这是通常使用的算法rand)的一个缺陷:低阶位不是随机的.

但是,你仍然有截断的问题:即,因为(1 << 32) % 83是77,这意味着76号在0到(略)看起来比77和82之间的数字为避免这种情况更频繁,你应该扔掉传入的值(即通话arc4random再次)如果它在上面(1 << 32) / 83 * 83.

(我假设范围arc4random从0到2 32 -1.相应地调整上述说明.)


小智 9

arc4random具有基于当前时间生成随机数的优越算法.还有其他兰特功能,但它们不是很好,需要播种.

  • `arc4random`也需要播种,它只是在第一次使用前播种. (3认同)