代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

使用mod range的objective-c中的随机数?

  •  2
  • Dan Rosenstark  · 技术社区  · 14 年前

    我读过 here --不太了解——使用mod range是不好的。因此,这是对目标C的典型建议

    int r = arc4random() % 45;
    

    从0到45之间得到一个数字可能是一个坏主意(关于分布和这个公式对低位有偏好)。目标C中应该使用什么?




    讽刺挖苦; 我很高兴终于能够在使用所有高级语言(JavaET.AL)之后终于学会了这些东西。明天我将试着用两根树枝生火。</sarcasm>

    1 回复  |  直到 14 年前
        1
  •  1
  •   mmmmmm    14 年前

    Java和ObjeCebug C一样高,在这种情况下,Java“随机.GETTIN())与ARC4Audio相同,因为它们都返回32位伪随机数。

    URL中提出的问题(我在其他地方也看到过)是rand()。

    可能每32768重复一次 价值观。

    当OSX的 arc4random 可能有(2*1700)个州。

    但是,与所有使用伪随机生成器一样,在使用它们之前,您需要了解它们的弱点,例如,在某些生成器中倾向于使用低位,并且在 OpenBSD arc4random man page 在哪里说

    建议使用arc4random_uniform()。 在类似``arc4random()的构造上 %上限“”,因为它避免了“modulo” 当上界不是 二的力量。