1

我目前正在学习并行计算,为了练习,我需要并行的随机数生成器。但我似乎无法在子例程中使用 RNG,以便它们返回不同的数字。下面的代码是我做的最简单的测试,同时弄清楚如何做到这一点。对于每次迭代,它返回相同的数字,但我不知道为什么。请你解释一下我不明白的地方。

#include <iostream>
#include <random>
void morerandom(double& num, double seednum)
{
     std::mt19937 mt;
     mt.seed(seednum);
     std::uniform_real_distribution<double> ureal_d(0.,1.);
     num = ureal_d(mt);
}


int main()
{
    std::vector<double> nums = {0.1, 0.4, 0.3, 0.3, 0.1};
    std::vector<double> results(5,0.);

    for (unsigned k=0; k<5; k++)
    {
        morerandom(results[k], nums[k]);
        std::cout << results[k] << std::endl;
    }

    return 0;
}
4

1 回答 1

3

The argument to seed should by an int or other integral type, you are using always 0 as seed due to conversion from double to int.

于 2012-09-30T20:10:34.120 回答