随机数生成器与 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 不同的数字,但每次编译时它们的顺序将再次相同 运行.
有关更多信息,请阅读此处:
我想了解为什么我的代码没有按预期工作。我的意思是我想生成一个介于 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 不同的数字,但每次编译时它们的顺序将再次相同 运行.
有关更多信息,请阅读此处: