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

标签 c++ random c++11

我目前正在学习并行计算,为了进行练习,我需要并行随机数生成器。 但我似乎无法在子程序中使用 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;
}

最佳答案

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

关于c++ 11子函数中的随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12664204/

相关文章:

c++ - 'a[i] = i;' 是否总是导致明确定义的行为?

c++ - 为什么 const 类成员必须是静态的才能得到适当的优化?

c++ - 漫反射 Material 奇怪的光线追踪行为

javascript - JS Dice - 使用 if 条件将 Math.random 值分配给 html 图像

c# - 如何以 "natural"方式高效地在 2D 表面上展开对象?

c++ - C++11 中的静态局部变量?

c++ - 使用 C++11 Lambda 函数更改 vector(list, deque...) 中的所有元素

c++ - 请求关于 dll 编程的好教程

php - Mysql PHP 中的随机数生成

c++ - static_assert 检查非模板类的模板构造函数中的值