随机数重复发生在C ++中

时间:2013-08-07 09:07:53

标签: c++ random

所有

我担心我不得不用一个经常被问到的问题打扰你。幸运的是,我的问题似乎与您熟悉的问题略有不同。

这是我的代码:

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次)时,我发现有一些系列具有完全相同的元素,尤其是相邻的系列

我可以知道这是为什么吗?我怎样才能生成一系列随机的随机数?

非常感谢,并再次为这个简单的问题申请。

此致

2 个答案:

答案 0 :(得分:3)

您应该只在srand(time(NULL));开头的程序中运行main()一次。

在大多数系统上,time(NULL)以秒为单位返回时间。这意味着如果您在同一秒内运行srand(time(NULL))两次,您将得到相同的随机种子,结果是相同的随机序列。因此,您不应该多次调用它。

答案 1 :(得分:0)

所有生成的数字仅取决于您传递给srand的数字。你在那里度过时间,所以如果你在一秒钟内运行两次,你将获得相同的序列。

如果您需要在程序中运行它,请不要多次调用srand。如果您需要在不同的程序运行中有所不同,您可能会尝试使种子更随机。例如,在类似unix的系统上,您可以尝试阅读/dev/random/种子