我使用的功能随机()%×的随机数的产生,但我每次启动应用程序时我看到,它创建或生成相同的数字。
像我将随机基于该随机数一些图片,我看到的所有图像都在同一个地方放置不管多少次,我运行应用程序。
我使用的功能随机()%×的随机数的产生,但我每次启动应用程序时我看到,它创建或生成相同的数字。
像我将随机基于该随机数一些图片,我看到的所有图像都在同一个地方放置不管多少次,我运行应用程序。
你可能会有更好的运气arc4random()
你不需要明确种子它,它似乎是一个“更好的”随机的。
强制性XKCD漫画 :
在您的应用程序委托:
- (void) applicationDidFinishLaunching:(UIApplication *)application
{
srandom(time(NULL));
// ...
for (int i = 0; i < 100; i++) {
NSLog(@"%d", random());
}
}
这部作品的原因是因为伪随机数生成器需要出发,或种子值。 使用的时候,你更有可能获得在每次执行“随机”数的不同序列。
如果没有指定的种子值,相同的种子用于在每次执行时,它产生相同的序列。 这通常是不希望的行为,但在某些情况下,它是能够产生相同的序列,例如,用于测试算法有用。
在大多数情况下,你会想指定的种子值,将运行之间变化,这是在当前的时间就派上用场了。
对于遇到这个帖子新手:
的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
从终端。) arc4random会比RAND()或随机更好的解决方案()。 请参见本 。
不要忘了,你需要通过srandom使用它,与不断变化的值,如当前时间之前播种随机数发生器。
()首先调用srandomdev。
srandomdev();
长my_rand =随机();
不要使用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!");