所有
我担心我不得不用一个经常被问到的问题打扰你。幸运的是,我的问题似乎与您熟悉的问题略有不同。
这是我的代码:
vector<double> rand_array;
rand_array.resize(length);
srand(time(NULL));
for(int i = 0; i < length; i++)
{
double d = rand() % 100;
d = d/double(100);
rand_array[i] =d;
}
上面的代码确实产生了一个0到1之间的随机数系列。然而,当我运行这些代码几次(例如100次)时,我发现有一些系列具有完全相同的元素,尤其是相邻的系列
我可以知道这是为什么吗?我怎样才能生成一系列随机的随机数?
非常感谢,并再次为这个简单的问题申请。
此致
长
答案 0 :(得分:3)
您应该只在srand(time(NULL));
开头的程序中运行main()
一次。
在大多数系统上,time(NULL)
以秒为单位返回时间。这意味着如果您在同一秒内运行srand(time(NULL))
两次,您将得到相同的随机种子,结果是相同的随机序列。因此,您不应该多次调用它。
答案 1 :(得分:0)
所有生成的数字仅取决于您传递给srand
的数字。你在那里度过时间,所以如果你在一秒钟内运行两次,你将获得相同的序列。
如果您需要在程序中运行它,请不要多次调用srand
。如果您需要在不同的程序运行中有所不同,您可能会尝试使种子更随机。例如,在类似unix的系统上,您可以尝试阅读/dev/random/
种子