简体   繁体   English

c ++ 11子函数中的随机数生成器

[英]c++11 Random number generator in subfunction

I am learning parallel computing at the moment, and for a exercise I need random number generators in parallel. 我正在学习并行计算,对于练习我需要并行的随机数生成器。 But I do not seem to be able to use a RNG in subroutines, so that they return different numbers. 但我似乎无法在子程序中使用RNG,因此它们返回不同的数字。 The following code is the simplest test I made, while figuring out how to do this. 下面的代码是我做的最简单的测试,同时弄清楚如何做到这一点。 For each iteration it returns the same number, but I do not know why. 对于每次迭代,它返回相同的数字,但我不知道为什么。 Would you please explain what I do not understand. 请你解释一下我不明白的地方。

#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;
}

seed的参数应该是int或其他整数类型 ,由于从double转换为int ,因此总是使用0作为种子。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM