Rand() % 14 生成非均匀值
在尝试生成特定范围内的随机值时,一些程序员可能会遇到使用 rand() 函数时出现异常行为。报告的一个常见问题是 rand() % 14 始终返回 6 或 13 的值。
要理解这一现象,深入研究 rand() 的底层算法至关重要。苹果机器上使用的具体实现是基于乘法与进位(MWC)生成器。不幸的是,这个生成器的一个弱点是它能被 7 整除,特别是乘数值 16807。
因此,初始化 srand() 后立即生成的前几个随机数的低位位有限熵。在 rand() % 14 的情况下,低位将始终具有相同的值,仅导致两种可能的结果:6 或 13。
为了缓解此问题,一个简单的解决方案是丢弃初始化后生成的前几个随机数。通过多次调用 rand() 而不使用结果,算法的内部状态变得更加混乱,并且恢复了值的均匀分布。
以上是为什么 `rand() % 14` 产生不一致的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!