为什么新的随机库比 rand() 更好?
当代关于 rand() 的担忧引发了关于利用高级随机数的讨论基于引擎分布范式的生成(RNG)过程,而不是传统的 std::rand() 和模方法。为了第一手了解 rand() 的缺点,进行了一个快速实验。
利用 std::rand() 和 std 创建了两个函数 getRandNum_Old() 和 getRandNum_New(): :mt19937 和 std::uniform_int_distribution 分别生成 0 到 5 之间的随机数。使用每种方法生成 960,000 个随机数,并记录每个数字(0-5)的频率。标准差作为衡量标准,值越低表明分布越均匀。该过程重复了 1000 次,并测量了每次迭代所需的时间。
令人惊讶的是,两种方法中的卷数分布相似。新方法大约慢了 4 倍。速度的提升似乎是以质量的最小提高为代价的。
然而,一个关键的区别在于 RNG 实现本身。许多 rand() 实现都采用线性同余生成器 (LCG),但它们通常不是最强大的。尽管它们很流行,但它们通常在进行的基本测试中产生可接受的结果。
低于标准的 rand() 实现的缺点包括低位随机性低、周期短、RAND_MAX 低以及连续序列之间的相关性提取物。然而,值得注意的是,这些限制并不是 rand() API 固有的。
rand() 的根本问题集中在:
新的库通过提供以下功能解决了这些问题:
性能方面,std::mt19937(在测试中由 std::rand() 使用)比 std::minstd_rand 慢(
以上是为什么 C 中的 `` 库比 `rand()` 更受欢迎?的详细内容。更多信息请关注PHP中文网其他相关文章!