C++ Seeding Surprises (2015)
a year ago
- #Programming
- #Random Number Generation
- #C++
- C++11的std::seed_seq旨在改进随机数生成器的种子设置,但仍存在局限性。
- 使用单个32位整数为梅森旋转器等大状态RNG播种会导致可预测性和偏差问题。
- 即使提供充足种子数据,std::seed_seq仍可能引入偏差,因为它不是双射函数。
- 用不足的种子数据初始化RNG会导致输出缺失或重复,引发系统性偏差。
- 梅森旋转器需要19937位种子数据以实现无偏初始化,这使得较小种子存在问题。
- std::seed_seq的设计强制其在非必要场景使用,使std::random_device的正确播种复杂化。
- 提出的解决方案包括放宽种子序列要求,并为std::random_device添加generate方法。