Hasty Briefsbeta

双语

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方法。