生成均匀分布的随机整数
在许多编程应用中,生成指定范围内的随机整数是一个常见的需求。然而,确保这些整数均匀分布是一个挑战。本文探讨了实现均匀分布的各种方法。
现有代码和限制
用户提供的代码利用 rand() 函数在给定范围。然而,该方法缺乏均匀性,特别是对于像<0, 1>这样的小范围。这是由于 rand() 返回最大值 RAND_MAX 的概率较低。
建议公式
为了解决这个问题,用户设计了一个新公式:
( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX
虽然这个公式旨在提高均匀性,但抽样证明它仍然存在不足data.
C 标准库解决方案
C 标准库为这个问题提供了一个优雅且可靠的解决方案。 std::random 标头包含一组随机数生成器和分布,可以生成均匀分布的随机数。
#include <random> // Initialize random-number engine with a seed std::random_device rd; std::mt19937 rng(rd()); // Define uniform integer distribution std::uniform_int_distribution<int> uni(min, max); // Generate random integer within range auto random_integer = uni(rng);
这种方法利用经过充分测试和优化的代码,确保均匀分布和效率。它消除了重新发明轮子的需要以及对偏差或种子值的担忧。
以上是如何生成指定范围内真正均匀分布的随机整数?的详细内容。更多信息请关注PHP中文网其他相关文章!