首页 >后端开发 >C++ >如何在 C 中生成均匀分布的随机整数?

如何在 C 中生成均匀分布的随机整数?

Barbara Streisand
Barbara Streisand原创
2024-12-24 20:17:11855浏览

How Can I Generate Uniformly Distributed Random Integers in C  ?

生成均匀分布的随机整数

在开发软件时,生成指定范围内的随机整数是一项常见任务。然而,找到一个快速且均匀分布的随机数生成器可能具有挑战性。在本文中,我们通过探索在给定范围内生成随机整数的各种方法来解决这个问题。

简单的方法

生成随机整数的常见方法是使用 rand()功能。然而,正如原始问题中所表达的, rand() 可能会导致有偏差的分布,特别是对于小范围。

为了解决这个问题,提出了一个替代公式:

( (max - min) * rand() + (RAND_MAX / (2 * (max - min))) ) / RAND_MAX

虽然这个公式提供了更均匀的分布,但它仍然无法满足所有要求,即速度、均匀分布、变量范围和可播种性。

C 标准库救援

介绍 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 定义了要生成的整数范围,保证该范围内的所有值都有相同的被选择概率。

此方法满足所有要求:

  • 速度:标准库实现非常高效,即使生成大量随机数也是如此。
  • 均匀分布: std::uniform_int_distribution 函数确保生成的数字无偏且均匀分布。
  • 变量范围:可以通过设置最小和最大参数将分布自定义为任何整数范围。
  • 可播种性: rd 参数提供了一种用特定值为生成器提供种子的方法,允许

卓越的解决方案

总之,在 C 中生成均匀分布随机整数的最简单、最好的方法是使用 std::uniform_int_distribution 和 std::mt19937 函数。这种方法利用了标准库的优化算法,保证了速度和随机性。

以上是如何在 C 中生成均匀分布的随机整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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