【发布时间】:2019-08-18 03:52:02
【问题描述】:
请检查下面给出的代码。它每次执行生成的随机数是上一次执行时生成的随机数的增量。
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(NULL));
cout<<"\n Random Number : "<<rand()<<endl;
cin.get();
return 1;
}
请执行5-6次,你会看到每次执行的随机数都在增加,并且非常接近。
注意:请使用 CodeBlocks 或 Visual Studio 进行检查,而不是在线编译器。
【问题讨论】:
-
对于
rand()的随机性几乎没有任何保证。您的行为可能是由于每次测试时srand都使用稍大的值(当前时间)播种。它可能只是在每次第一次调用时返回种子,或者与它密切相关的东西。 -
time(NULL)以秒为单位提供整数形式的时间,因此如果您在同一秒内调用该程序两次,您将获得两次相同的数字。如果你在下一秒调用它,你会得到完全不同的数字:ideone.com/McE7CD -
此外,您似乎比较了随机数,其中每个随机数由不同的种子生成,其中种子具有很强的关系。要获得任何有意义的内容,您必须查看从同一种子生成的大量随机数
标签: c++