首页 > 后端开发 > C++ > 如何生成指定范围内真正均匀分布的随机整数?

如何生成指定范围内真正均匀分布的随机整数?

Barbara Streisand
发布: 2024-12-20 15:43:17
原创
186 人浏览过

How Can We Generate Truly Uniformly Distributed Random Integers in a Specified Range?

生成均匀分布的随机整数

在许多编程应用中,生成指定范围内的随机整数是一个常见的需求。然而,确保这些整数均匀分布是一个挑战。本文探讨了实现均匀分布的各种方法。

现有代码和限制

用户提供的代码利用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板