由于标题中的空间原因,我不得不滥用术语。请稍等一下。
std::seed_seq
用于为伪随机生成器设定种子。通常我准备一个std::array
uint32_t
并填入真正随机的数字(通过std::random_device
*)并将开始和结束迭代器传递给std::seed_seq
(参见示例)码)。
问题是,给定一个伪随机生成器(例如std::mt19937
),我怎么知道阵列的正确大小才能最佳播种?
关于std::mt19937
,因为状态大小是19937位,我猜它是624 uint32_t
s,是这样的吗?知道的一般方法是什么?
std::mt19937 init_mersenne_twister() {
//624 is the internal state sequence size of mt19937
std::array<std::uint32_t, 624> seed_bits{};
std::random_device real_random{};
std::generate(seed_bits.begin(), seed_bits.end(), std::ref(real_random));
std::seed_seq wrapped_seed_bits(seed_bits.begin(), seed_bits.end());
return std::mt19937(wrapped_seed_bits);
}
*我知道random_device可能无法使用,但这不是问题的关键。