注意:这篇文章不是如何在 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]));
}
但是在那个循环中它总是给我相同的数字。我发现 time(NULL) 改变种子的速度不够快。如何在每个循环中更快或更好地更改此种子?此外,我只能使用与 ANSI C 标准兼容的库。
I figured out that time(NULL) does not change the seed fast enough.
那是准确的。 time
以秒为单位返回当前时间戳,因此它每秒更改一次。
How can I change this seed faster ...
您需要一个随机源。在 POSIX 上,您可以使用 /dev/urandom
,但这当然不一定适用于支持 ANSI C 的所有平台。
因此,结论是 ANSI C 中没有 API 可以访问纯随机种子源,因此在 ANSI C 中获取新的随机种子的速度超过每秒一次是不可行的。
... even better change it in every loop?
在每次调用时植入一个伪随机数生成器是愚蠢的——不要尝试这样做。只需在程序开始时播种一次。(如果需要重复序列,可以重新播种)。