注意:这篇文章并不重复如何在C中生成随机数,它没有回答我的问题。
我有一个功能:
double generator(double * ran_i) {
srand(time(NULL));
return ran_i[rand()%1000];
}
采用包含1000个数字的数组,然后我尝试调用:
for(i=0; i< 1000; ++i) {
printf("%lf", generator(ran[0]));
}
但是在那个循环中它总是给我相同的数字。我发现时间(NULL)不会足够快地改变种子。如何更快地更改种子,甚至更好地在每个循环中更改它?另外,我只能使用与ANSI C标准兼容的库。
答案 0 :(得分:0)
我发现时间(NULL)不会足够快地改变种子。
那是准确的。 time
以秒为单位返回当前时间戳,因此每秒更改一次。
如何更快地更改此种子...
你需要一个随机源。在POSIX上,您可以使用/dev/urandom
,但这当然不一定适用于所有支持ANSI C的平台。
因此,结论是ANSI C中没有API来访问纯粹的随机种子源,因此在ANSI C中获取新的随机种子的速度要快于每秒一次。
...在每个循环中更好地改变它?
在每次通话中播种伪随机数生成器都很愚蠢 - 不要尝试这样做。只需在程序开始时播种一次。(如果需要重复序列,可以重新种子。)