在iOS上如何生成随机数?

22

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

6个回答

71

这里有一个非常类似的问题StackOverFlow上的问题。以下是其中一个更好的解决方案(不需要种子):

int r = arc4random() % 5;

11
如果他们希望将其从0提高到4,那么它的值为5。 - user102008
它能为所有的 n 给出无偏结果,而不仅仅是 2 的幂次方 n,请查看 man 页面。 - Catfish_Man

15
我使用。
#define RANDOM_SEED() srandom(time(NULL))
#define RANDOM_INT(__MIN__, __MAX__) ((__MIN__) + random() % ((__MAX__+1) - (__MIN__)))

所以您可以提供最小值和最大值


10

你应该使用当前时间来种子化随机数生成器。

srand(time(0));

6

你需要多么随机呢?如果你希望生成加密级别的随机数,则可以使用SecRandomCopyBytes()函数。


3

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


2

生成随机数的简单函数:

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

虽然作为答案可能有些多余,但我喜欢这里使用数字42而不是5的方式。 - Toastor
1
因为我想生成最大为41的随机数,所以我输入了42,这样它将生成0到41之间的随机数,包括0和41,因为我想使用41。 - Himanshu padia
很好。然而,我强烈建议你阅读《银河系漫游指南》——我相信这是程序员普遍必读的非选择性读物。 - Toastor
1
@Toastor:太有趣了 ;) - Jordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接