我怎么知道std :: seed_seq的正确大小?

时间:2016-03-11 08:57:11

标签: c++ c++11 random

由于标题中的空间原因,我不得不滥用术语。请稍等一下。

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可能无法使用,但这不是问题的关键。

0 个答案:

没有答案