gpt4 book ai didi

c++ - 生成伪随机 16 位整数

转载 作者:可可西里 更新时间:2023-11-01 16:36:42 32 4
gpt4 key购买 nike

我需要生成 16 位伪随机整数,我想知道最佳选择是什么。

我想到的明显方法如下:

std::random_device rd;
auto seed_data = std::array<int, std::mt19937::state_size> {};
std::generate(std::begin(seed_data), std::end(seed_data), std::ref(rd));
std::seed_seq seq(std::begin(seed_data), std::end(seed_data));
std::mt19937 generator(seq);
std::uniform_int_distribution<short> dis(std::numeric_limits<short>::min(),
std::numeric_limits<short>::max());

short n = dis(generator);

我在这里看到的问题是 std::mt19937 生成 32 位无符号整数,因为它是这样定义的:

using mt19937 = mersenne_twister_engine<unsigned int, 
32, 624, 397,
31, 0x9908b0df,
11, 0xffffffff,
7, 0x9d2c5680,
15, 0xefc60000,
18, 1812433253>;

这意味着静态转换已经完成,并且只有这些 32 位整数的最低有效部分被分配使用。所以我想知道这些伪随机短裤系列有多好,但我没有数学专业知识来回答这个问题。

我希望更好的解决方案是为 16 位整数使用您自己定义的 mersenne_twister_engine 引擎。但是,我还没有找到任何提到的模板参数集(例如,可以找到要求 here)。有没有?

更新:我更新了代码示例,对分发进行了适当的初始化。

最佳答案

你的方法确实是正确的。

数学论证很复杂(我将尝试挖掘出一篇论文),但是采用 C++ 标准库实现的 Mersenne Twister 的最低有效位是正确的做法。

如果您对序列的质量有任何疑问,请通过顽固的测试运行它。

关于c++ - 生成伪随机 16 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54111569/

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