gpt4 book ai didi

c++ - 为什么即使种子相同,生成的随机数也不同?

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:28 28 4
gpt4 key购买 nike

随机数是在同一时刻生成的,即同一时间生成的,所以种子应该是一样的,是一样的,但为什么条件一样,生成的随机数却不一样。

# include < cstdlib > 
# include < iostream >
#include < ctime >
using namespace std;
int main()
{
double a,b;

srand(time(0));
a = rand()% (1000 + 1 - 200) + 200;
cout << "Seed = " << time(0) << endl;
cout<<a<<endl;
b = rand()% (1000 + 1 - 200) + 200;
cout << "Seed = " << time(0) << endl;
cout<<b<<endl;
return 0;
}

预计第一个数字 =529第二个数字 =529

实际结果第一个数字 =529第二个数字 =819

最佳答案

PRNG 通过保持状态来生成数字序列。这与 PRNG 使用的算法相结合,完全决定了调用将产生的数量。因此,当 PRNG 被调用时,状态也必须改变,否则它会在每次调用时产生完全相同的数字。

您播种一次,然后调用 PRNG。这会修改其内部状态并返回一个数字。下一次调用不会对相同的状态进行操作,因此它可能会产生不同的数字。在您的示例中也是如此

播种是您确定 PRNG 开始状态的方式。如果您要在第二次调用 rand 之前添加对 srand(time(0)) 的另一个调用,它很可能会返回之前的数字,因为您正确地注意到 time 可能没有机会更新。这就是为什么通常的建议是以这种方式为每个程序只播种一次。

关于c++ - 为什么即使种子相同,生成的随机数也不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55355220/

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