c - 在每个循环中用不同的种子在 C 中生成随机数?

标签 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]));
}

但是在那个循环中它总是给我相同的数字。我发现 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?

在每次调用时植入一个伪随机数生成器是愚蠢的——不要尝试这样做。只需在程序开始时播种一次。(如果需要重复序列,可以重新播种)。

关于c - 在每个循环中用不同的种子在 C 中生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705026/

相关文章:

iphone - NEON:将 uint8_t 数组加载到 128 位寄存器中

python - 如何使 random.shuffle 真正随机?

java - 在 Java 中生成唯一的随机数

php - MySQL/PHP - 经过一定时间后自动更新列

c++ - 时钟获取时间 : identifier not found in Visual Studio in Windows 10

条件与信号量同步

c - strstr 函数中针的大小

c++ - 二项式随机数生成

c - CLOCK_TAI 的纪元是什么?

c - 有没有办法从字符串值获取实际类型?