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

の引数seedは、intまたは他の整数型である必要があります。からへ0の変換のため、常にシードとして使用しています。doubleint

于 2012-09-30T20:10:34.120 に答える