在开发软件时,生成指定范围内的随机整数是一项常见任务。然而,找到一个快速且均匀分布的随机数生成器可能具有挑战性。在本文中,我们通过探索在给定范围内生成随机整数的各种方法来解决这个问题。
生成随机整数的常见方法是使用 rand()功能。然而,正如原始问题中所表达的, rand() 可能会导致有偏差的分布,特别是对于小范围。
为了解决这个问题,提出了一个替代公式:
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
虽然这个公式提供了更均匀的分布,但它仍然无法满足所有要求,即速度、均匀分布、变量范围和可播种性。
介绍 C 标准库函数 std::uniform_int_distribution 及其关联的随机数生成器 std::mt19937。这种方法简单、快速,并提供公正的结果。
#include <random> std::random_device rd; std::mt19937 rng(rd()); std::uniform_int_distribution<int> uni(min,max); auto random_integer = uni(rng);
std::random_device 使用真实的熵源初始化生成器,确保生成的数字是不可预测的和随机的。 std::uniform_int_distribution 定义了要生成的整数范围,保证该范围内的所有值都有相同的被选择概率。
此方法满足所有要求:
总之,在 C 中生成均匀分布随机整数的最简单、最好的方法是使用 std::uniform_int_distribution 和 std::mt19937 函数。这种方法利用了标准库的优化算法,保证了速度和随机性。
以上是如何在 C 中生成均匀分布的随机整数?的详细内容。更多信息请关注PHP中文网其他相关文章!