相关疑难解决方法(0)

实现之间的随机输出不同

我用libstdc ++,libc ++和dinkumware尝试过这个程序:

#include <iostream>
#include <algorithm>
#include <vector>
#include <random>
#include <functional>
#include <limits>

int main()
{
    std::vector<int> v(10);

    std::mt19937 rand{0};
    std::uniform_int_distribution<> dist(
        1, 10
    );

    std::generate_n(v.begin(), v.size(),
        std::bind(dist, rand));

    for (auto i : v)
        std::cout << i << " ";
}
Run Code Online (Sandbox Code Playgroud)

输出分别是:

6 6 8 9 7 9 6 9 5 7 

6 1 4 4 8 10 4 6 3 5 

5 10 4 1 4 10 8 4 8 4 
Run Code Online (Sandbox Code Playgroud)

每次运行的输出都是一致的,但正如您所看到的,它们是不同的.说明?

c++ random c++11

5
推荐指数
1
解决办法
217
查看次数

在 C++ 中从给定的种子生成相同的随机数序列

我正在使用 mt19937 从给定种子生成随机字符串,如下所示:

std::string StringUtils::randstring(size_t length, uint64_t seed) {
    static auto& chrs = "abcdefghijklmnopqrstuvwxyz";

    thread_local static std::mt19937 rg(seed);
    thread_local static std::uniform_int_distribution<std::string::size_type> pick(0, sizeof(chrs) - 2);

    std::string s;
    s.reserve(length);

    while(length--) {
        s += chrs[pick(rg)];
    }

    return s;
}
Run Code Online (Sandbox Code Playgroud)

我想保证随机数序列(以及生成的随机字符串)在同一架构的不同机器上是相同的,根据这个问题的答案应该是这样的。

但是,当我重建二进制文件(不更改任何依赖项或库)时,同一种子的随机数序列会发生变化(与使用相同种子的先前构建生成的序列相比)。

如何从同一机器架构+映像(x86_64 Linux)上不同二进制文件的给定种子生成有保证的随机数序列?

c++ random deterministic mersenne-twister

5
推荐指数
1
解决办法
1210
查看次数

标签 统计

c++ ×2

random ×2

c++11 ×1

deterministic ×1

mersenne-twister ×1