0

全部

恐怕我不得不用一个常见问题来打扰您。幸运的是,我的问题似乎与您熟悉的问题有些不同。

这是我的代码:

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

我可以知道这是为什么吗?以及如何生成一系列真正随机的随机数?

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

问候

4

2 回答 2

3

您应该只srand(time(NULL)); 在程序中运行一次,在main().

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

于 2013-08-07T09:17:18.930 回答
0

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

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

于 2013-08-07T09:22:24.033 回答