【问题标题】:I fear that arc4random has betrayed me我担心 arc4random 背叛了我
【发布时间】:2011-06-05 14:24:03
【问题描述】:

我的代码可以描绘一个从 0 到 1 的随机数。我发现数字 1 出现的次数远远多于数字 0,我认为这在统计上是可能的。

这是我的代码:

int shipNumber = arc4random() % 2;

这段代码应该工作吗?我是不是快疯了?

【问题讨论】:

  • 只要您在日志中或任何地方看到 0 和 1,那么它肯定是有效的。
  • “更多次”是多少?您的样本量是多少?
  • 有可能你运行它 100,000 次并且每次都得到 1。不过,这不太可能。

标签: iphone objective-c cocos2d-iphone arc4random


【解决方案1】:

该代码应该可以工作。

我怀疑您看到的内容确实是随机的(或者至少是足够随机的),并且您的大脑正在尝试寻找模式。 (每个人的大脑都试图在任何地方找到模式。这就是你阅读本文的方式。问题是随机性中没有模式 [这几乎是定义] 供你的大脑锁定,所以它发明了一些。)

如果您真的想检查输出的随机性,则需要进行某种统计分析。

【讨论】:

    【解决方案2】:

    您可能会看到modulo bias

    【讨论】:

    • 本例中没有模偏差,因为它是模 2,并且在 0..2^32-1 范围内的偶数和奇数的数量完全相同
    • 来自 arc4random 联机帮助页:“arc4random_uniform() 将返回小于 upper_bound 的均匀分布的随机数。推荐使用 arc4random_uniform() 而不是像 arc4random() % upper_bound 这样的结构,因为它避免了当上限不是二的幂”。因为在这种情况下,upper_bound 是 2 的幂,所以模偏差应该不是问题。
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多