为什么新的随机库比 std::rand() 更好?
简介
虽然 std::rand() 是常用的随机数生成器接口,但最新的 C 版本提供了一个扩展的新随机库,旨在解决其局限性。本文研究了 std::rand() 和新库之间的差异,重点介绍了优点和性能注意事项。
std::rand() 的缺点
传统rand() 实现采用线性同余生成器 (LCG),它可能会表现出弱点:
新随机库的优点
相比之下,
为跨平台种子生成器提供默认的 random_device,确保不同编译器的输出一致。
性能比较
本文包含旧的基于 LCG 的 rand() 和新的基于 Mersenne Twister 的生成器之间的性能比较。令人惊讶的是,两种方法生成的随机数的总体分布相似。然而,新库明显慢了很多,大约比 rand() 慢 4 倍。
建议
对于基本应用程序或随机性质量不重要的情况,std: :rand() 仍然是一个可行的选择。然而,对于需要高质量和可重复的随机数的更高要求的应用程序,强烈建议使用新的随机库。
性能优化
如果性能是一个问题,文章建议使用 std::minstd_rand,这是新库提供的基于 LCG 的生成器,它在质量和性能之间提供了良好的平衡。
结论
新C 中的随机库通过提供更高质量的生成器、显式状态管理和一致的播种来解决 std::rand() 的局限性。虽然在某些情况下它可能会比较慢,但当随机性质量至关重要时,它的优点超过了性能缺点。以上是为什么要放弃'std::rand()”而使用新的 C 随机库?的详细内容。更多信息请关注PHP中文网其他相关文章!