在C中生成随机数,每个循环中有不同的种子?

时间:2017-04-30 09:43:32

标签: c random time random-seed

注意:这篇文章并不重复如何在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标准兼容的库。

1 个答案:

答案 0 :(得分:0)

  

我发现时间(NULL)不会足够快地改变种子。

那是准确的。 time以秒为单位返回当前时间戳,因此每秒更改一次。

  

如何更快地更改此种子...

你需要一个随机源。在POSIX上,您可以使用/dev/urandom,但这当然不一定适用于所有支持ANSI C的平台。

因此,结论是ANSI C中没有API来访问纯粹的随机种子源,因此在ANSI C中获取新的随机种子的速度要快于每秒一次。

  

...在每个循环中更好地改变它?

在每次通话中播种伪随机数生成器都很愚蠢 - 不要尝试这样做。只需在程序开始时播种一次。(如果需要重复序列,可以重新种子。)