gpt4 book ai didi

c++ - 与 C++ 2011 不相关的并行随机种子?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:29 26 4
gpt4 key购买 nike

目前,我有一个 Fortran 语言的主要应用程序,它需要一个种子来生成伪随机数。我想用完全不相关的种子(以及完全独立的伪随机数链)运行这个应用程序很多(很多)次。

我的问题是:如何使用 C++ 2011 生成种子?

最佳答案

在您的主线程中,从良好的随机源(例如,Linux 上的 /dev/urandom)中提取单个种子(或种子序列)。使用该数据为单个根 PRNG 播种。然后使用 that PRNG 为您的线程局部 PRNG 生成种子值。

#include <random>
#include <vector>

typedef std::mt19937 rng_type;
std::uniform_int_distribution<rng_type::result_type> udist;

int main()
{
rng_type rng;

// seed rng first, and store the result in a log file:
rng_type::result_type const root_seed = get_seed();
rng.seed(root_seed);

// make thread seeds:
std::vector<rng_type::result_type> seeds(NUMBER_OF_THREADS);
for (auto & n : seeds) { n = udist(rng); }

// make threads...
}

<random>中的随机数引擎接口(interface)允许您从单个整数和整数的序列 播种。如果你想要额外的随机性,你可以播种 mt19937来自数百个整数的序列。

关于c++ - 与 C++ 2011 不相关的并行随机种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12320083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com