iPhone:随机()函数给我相同的随机数,每次(iPhone: random() function

2019-07-18 15:32发布

我使用的功能随机()%×的随机数的产生,但我每次启动应用程序时我看到,它创建或生成相同的数字。

像我将随机基于该随机数一些图片,我看到的所有图像都在同一个地方放置不管多少次,我运行应用程序。

Answer 1:

你可能会有更好的运气arc4random()你不需要明确种子它,它似乎是一个“更好的”随机的。



Answer 2:

强制性XKCD漫画 :



Answer 3:

在您的应用程序委托:

- (void) applicationDidFinishLaunching:(UIApplication *)application 
{
    srandom(time(NULL));

    // ...

    for (int i = 0; i < 100; i++) {
      NSLog(@"%d", random());
    }
}

这部作品的原因是因为伪随机数生成器需要出发,或种子值。 使用的时候,你更有可能获得在每次执行“随机”数的不同序列。

如果没有指定的种子值,相同的种子用于在每次执行时,它产生相同的序列。 这通常是不希望的行为,但在某些情况下,它是能够产生相同的序列,例如,用于测试算法有用。

在大多数情况下,你会想指定的种子值,将运行之间变化,这是在当前的时间就派上用场了。



Answer 4:

对于遇到这个帖子新手:

random()函数产生一个伪随机序列 。 random()方法让你每次使用它的时候相同的伪随机序列。 你需要“种子”序列每次运行它,所以它看起来不同的时间选择不同的出发点左右。 您可以使用系统时间的种子(srandom(time(NULL))或使用辅助函数srandomdev()

实验尝试:

#include "stdio.h"

int main(void) {
    int i;
    for (i = 0; i < 10; i++)
        printf("%d\n", random());

    return 0;
}

你会总是得到相同的顺序,我的电脑上它提供了:

1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421

更多阅读:

  • 随机手册页了解更多信息。 (运行man random从终端。)


Answer 5:

arc4random会比RAND()或随机更好的解决方案()。 请参见本 。



Answer 6:

不要忘了,你需要通过srandom使用它,与不断变化的值,如当前时间之前播种随机数发生器。



Answer 7:

()首先调用srandomdev。

srandomdev();
长my_rand =随机();



Answer 8:

不要使用srandom(或者类似的你选择的随机数函数),而且使用条件左右,所以,如果你正在调试中,事情总是会发生相同的方式。 我也倾向于把NSLog的警告做这样的事情,当,所以我不船舶布莱恩 - 死代码。

#if DEBUG==0
srandom(time(NULL));
#else
NSLog(@"Debug build: Random numbers are not random!");
#endif

要么

if(!debuggingBuild)
    srandom(time(NULL));
else
    NSLog(@"Debug build: Random numbers are not random!");


文章来源: iPhone: random() function gives me the same random number everytime
标签: iphone random