【问题标题】:How do I generate random numbers on iOS?如何在 iOS 上生成随机数?
【发布时间】:2010-10-05 08:28:00
【问题描述】:

在 iOS 上使用 Objective-C 生成随机数的最佳方法是什么?
如果我使用(int)((double) rand() / ((double)(RAND_MAX) + (double) 1) * 5.0) 生成一个从 0 到 4 的数字,那么每次我在 iPhone 上启动该程序时,它都会生成相同的数字。

【问题讨论】:

    标签: ios objective-c random


    【解决方案1】:

    有一个非常相似的问题here on StackOverFlow。这是更好的解决方案之一(无需播种):

    int r = arc4random() % 5;
    

    【讨论】:

    • 5 如果他们想要它从 0 到 4
    • 它给出了所有 n 的无偏结果,而不仅仅是 n 的 2 次幂,参见手册页
    【解决方案2】:

    我用

    #define RANDOM_SEED() srandom(time(NULL))
    #define RANDOM_INT(__MIN__, __MAX__) ((__MIN__) + random() % ((__MAX__+1) - (__MIN__)))
    

    所以你可以给出最小值和最大值

    【讨论】:

      【解决方案3】:

      您应该使用当前时间播种随机数生成器。

      srand(time(0));
      

      【讨论】:

        【解决方案4】:

        你需要多少随机性?如果您想要足够随机的加密,请使用 SecRandomCopyBytes()。

        【讨论】:

          【解决方案5】:

          在程序开始时调用srand(),它会重新生成随机数生成器

          【讨论】:

            【解决方案6】:

            随机数生成的简单函数:

            int r = arc4random() % 42;  // generate number up to 42 (limit)
            

            【讨论】:

            • 虽然作为答案是多余的,但我喜欢这里使用数字 42 而不是 5。
            • 因为我想生成最多 41 的随机数,所以我给了 42,所以它将生成 0 到 41 之间,包括 0 和 41,因为我想使用 41。
            • 很公平。但是,我们强烈建议您阅读《银河系漫游指南》——我相信对于一般程序员来说,这是一本非可选读物。
            • @Toastor:太有趣了;)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-19
            • 2011-10-19
            • 1970-01-01
            • 1970-01-01
            • 2018-03-20
            • 1970-01-01
            相关资源
            最近更新 更多