随机数生成器与 srand 函数混淆

Random number generator confuses with srand function

我想了解为什么我的代码没有按预期工作。我的意思是我想生成一个介于 0 和 1 之间的双精度数,我已经了解到当我使用 (double)rand() / RAND_MAX,效果很好。但是我读到了 srand(time(NULL)) 每次编译时都会更改每个生成的随机数。但是,当我将它们一起使用时,程序始终会生成相同的随机数。为什么会这样?谢谢

这是我的代码:

//srand(time(NULL));
number = (double)rand() / (double)RAND_MAX;

srand()函数初始化伪随机数生成器。你可以把它想象成它指向 rand() 一个数字来开始它的 'calculations'。每次编译和 运行 程序时,srand() 函数都会为 rand() 函数提供 time(NULL) 的种子(顺便说一下,这是一个每秒都在变化的非常大的数字)。如果你不使用 srand(),你的 rand() 将始终 return 相同的数字序列,因为默认情况下它被赋予一个标准的不变种子(数字开始 'calculations').您可以尝试为您的 srand() 提供一个静态参数,例如: srand(1500) 您会看到它会 return 不同的数字,但每次编译时它们的顺序将再次相同 运行.

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

http://www.cplusplus.com/reference/cstdlib/srand/

http://www.cplusplus.com/reference/cstdlib/rand/