gpt4 book ai didi

c - C 中的 srand(time()) - 调用一次?

转载 作者:行者123 更新时间:2023-11-30 19:08:11 25 4
gpt4 key购买 nike

我刚刚发现播种生成器应该完成一次 - 例如在主函数中。函数如下:

int getRand(){
srand ( time(NULL) );
cout<<((double) rand() / (RAND_MAX))<<" ";
}

调用main:

int main(){ 
cout<<getlvl()<<" "<<getlvl()<<" "<<getlvl()<<" "<<getlvl();
return 0;
}

始终给我相同的输出。为什么 srand 应该只调用一次才能正常工作?

最佳答案

因为time(NULL)没有足够的分辨率。对于每次调用 srand() ,两次调用之间没有足够的时间,并且 time(NULL) 每次调用都会返回相同的时间。

因此,您本质上是为每次调用设置相同的种子。如果您使用更细粒度的时间函数,精度为纳秒,您可能会观察到差异。

如果在程序开始时调用srand()一次,则种子将设置为当前time(NULL)值,并且每次调用都会生成一个新的-随机值。如果您非常快速地连续调用该程序,您也可能会观察到相同的问题。

关于c - C 中的 srand(time()) - 调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45826893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com