Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中是否可以提高srand(time(NULL))的刷新速度?_C_Srand - Fatal编程技术网

在C中是否可以提高srand(time(NULL))的刷新速度?

在C中是否可以提高srand(time(NULL))的刷新速度?,c,srand,C,Srand,我想知道是否有办法提高srand(time(NULL))的速度函数“刷新”?我知道srand()会根据时间产生一个新的种子(因此每秒一次),但我正在寻找一种替代srand()的方法,它可以以超过1秒的间隔刷新 当我运行我的程序时,它会产生它应该产生的结果,但种子基本上保持不变一秒钟,因此如果程序每秒运行多次,结果保持不变 很抱歉问了这么一个简单的问题,但我无法在anywhere online上找到专门针对C的答案不是一个函数,而是两个函数:time()返回自历元以来的当前时间(以秒为单位);以及

我想知道是否有办法提高
srand(time(NULL))的速度函数“刷新”?我知道
srand()
会根据时间产生一个新的种子(因此每秒一次),但我正在寻找一种替代
srand()
的方法,它可以以超过1秒的间隔刷新

当我运行我的程序时,它会产生它应该产生的结果,但种子基本上保持不变一秒钟,因此如果程序每秒运行多次,结果保持不变

很抱歉问了这么一个简单的问题,但我无法在anywhere online上找到专门针对C的答案
不是一个函数,而是两个函数:
time()
返回自历元以来的当前时间(以秒为单位);以及初始化随机数生成器种子的
srand()
。您正在将rendom number生成器的种子初始化为以秒为单位的当前时间,这是一件非常合理的事情

然而,您有一些误解,您实际上只需要运行
srand
一次,或者最多每隔几分钟运行一次,之后
rand()
将继续自行生成更多随机数,
srand()
只是为rand设置一个初始种子


第二,如果你真的想这样做,虽然我不明白为什么你会这样做,你可以使用一个函数,返回时间到一个更高的精度。为此,我建议
gettimeofday()

您可以尝试从其他源获取种子值。例如,在unix系统上,您可以从/dev/random获取一个随机的四字节值:

void randomize() {
  uint32_t seed=0;
  FILE *devrnd = fopen("/dev/random","r");
  fread(&seed, 4, 1, devrnd);
  fclose(devrnd);
  srand(seed);
}

在Windows下,您可以使用
GetTickCount()
而不是
time()
。它每隔50毫秒改变一次(如果记得正确的话)。

我也遇到了同样的问题,我找到了一个简单的解决方法

#包括
#包括
int main(){
long long t1=std::chrono::高分辨率时钟::now();
标准::srand((无符号int)t1);
}

如果需要大于秒的精度,请使用从
gettimeofday()
派生的值,而不是
time()
。这与
srand
完全正交。适当的功能选择将取决于操作系统。此外:如果您担心随机数的质量,请从获取随机数据(使用证书身份验证以防止MotM攻击)
因此,如果程序每秒运行多次
——与您的第二段相矛盾。我相信OP并不是在代码本身中多次调用
srand()
,程序正在运行多次。@SouravGhosh我是说这样做是错误的方法,用户应该让程序每次运行更长时间,而只是运行rand()来获得更多的随机数。让我澄清一下,我并没有说你错了,只是说不要提出像
这样的更改,用户应该让程序每次运行的时间更长。这真的取决于程序的性质,不是吗?@SouravGhosh确实如此,但事实上rand()不应该用于任何东西,除了玩具程序。我假设用户只是想学习一些基本的C语言,并且对程序的工作方式有一定的灵活性。。我认为如果使用得当,
rand()
是可靠的。我很感兴趣。你能给我指出一些链接吗?我可以从中了解到在实际程序中使用
rand()
的缺点。另外,你不想使用add,你想使用bitwise或。可能值得注意的是,这依赖于某种类似UNIX的操作系统。