Random 随机数发生器与srand函数混淆

Random 随机数发生器与srand函数混淆,random,generator,srand,Random,Generator,Srand,我想知道为什么我的代码没有像我期望的那样工作。我的意思是,我想生成一个介于0和1之间的双倍数,我已经学会了当我使用 (double)rand()/rand_MAX,它工作得很好。但是我读到了srand(time(NULL)) 每次编译时更改每个生成的随机数。然而,当我将它们一起使用时,程序始终生成相同的随机数。为什么会发生这种情况?谢谢 这是我的密码: //srand(time(NULL)); number = (double)rand() / (double)RAND_MAX; 函数的作用是

我想知道为什么我的代码没有像我期望的那样工作。我的意思是,我想生成一个介于0和1之间的双倍数,我已经学会了当我使用 (double)rand()/rand_MAX,它工作得很好。但是我读到了srand(time(NULL)) 每次编译时更改每个生成的随机数。然而,当我将它们一起使用时,程序始终生成相同的随机数。为什么会发生这种情况?谢谢

这是我的密码:

//srand(time(NULL));
number = (double)rand() / (double)RAND_MAX;
函数的作用是初始化伪随机数生成器。你可以这样想,就像它指向
rand()
一个数字开始它的“计算”。每次编译和运行程序时,
srand()
函数都会为
rand()
函数提供
time(NULL)
的种子(顺便说一句,这是一个每秒变化的非常大的数字)。如果不使用
srand()
,您的
rand()
将始终返回相同的数字序列,因为默认情况下,它是一个标准的非更改种子(用于启动“计算”的数字)。您可以尝试给
srand()
一个静态参数,如:
srand(1500)
您将看到它将返回不同的数字,但每次编译和运行时它们的顺序都将相同

有关更多信息,请阅读此处: