首页 >后端开发 >C++ >为什么 `rand() % 14` 产生不一致的结果?

为什么 `rand() % 14` 产生不一致的结果?

Patricia Arquette
Patricia Arquette原创
2024-12-03 05:46:09958浏览

Why Does `rand() % 14` Produce Non-Uniform Results?

Rand() % 14 生成非均匀值

在尝试生成特定范围内的随机值时,一些程序员可能会遇到使用 rand() 函数时出现异常行为。报告的一个常见问题是 rand() % 14 始终返回 6 或 13 的值。

要理解这一现象,深入研究 rand() 的底层算法至关重要。苹果机器上使用的具体实现是基于乘法与进位(MWC)生成器。不幸的是,这个生成器的一个弱点是它能被 7 整除,特别是乘数值 16807。

因此,初始化 srand() 后立即生成的前几个随机数的低位位有限熵。在 rand() % 14 的情况下,低位将始终具有相同的值,仅导致两种可能的结果:6 或 13。

为了缓解此问题,一个简单的解决方案是丢弃初始化后生成的前几个随机数。通过多次调用 rand() 而不使用结果,算法的内部状态变得更加混乱,并且恢复了值的均匀分布。

以上是为什么 `rand() % 14` 产生不一致的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn