C++ 随机数库是 C++ 标准库中提供的用于生成伪随机数的库,它包含了多种随机数生成算法和分布函数,能够满足各种随机数生成需求。

随机数引擎和分布函数

随机数生成器主要分为两类:引擎(engine)和分布(distribution)。

  • 引擎:负责产生随机数序列,例如线性同余法引擎 (linear_congruential_engine)、梅森旋转法引擎 (mersenne_twister_engine)、减法带进位引擎 (subtract_with_carry_engine) 等。其中,梅森旋转法引擎是最常用的引擎。
  • 分布函数:从引擎生成的随机数序列中,根据指定的概率分布生成新的随机数,例如均匀分布 (uniform_distribution)、正态分布 (normal_distribution)、泊松分布 (poisson_distribution) 等。

示例代码

以下代码展示了如何使用 C++ 随机数库生成一个在 [1, 100] 之间的随机数:

#include <random>
#include <iostream>

int main() {
    std::mt19937 engine(std::random_device{}()); // 创建梅森旋转法引擎对象
    std::uniform_int_distribution<int> distribution(1, 100); // 创建均匀分布对象
    std::cout << distribution(engine) << std::endl; // 生成随机数并输出
    return 0;
}

详解随机数引擎

随机数引擎是随机数库中最重要的组成部分,它用于生成伪随机数序列。不同的随机数引擎拥有不同的算法和特点,开发者需要根据实际需求选择合适的引擎。

  • 梅森旋转法引擎 (Mersenne Twister Engine):最常用的引擎,具有周期长、高质量、均匀分布等特点。

示例代码

以下代码展示了如何使用梅森旋转法引擎生成 10 个随机数:

#include <random>
#include <iostream>

int main() {
    std::mt19937 engine(std::random_device{}());
    std::uniform_int_distribution<int> distribution(1, 100);
    for (int i = 0; i < 10; ++i) {
        std::cout << distribution(engine) << ' '; // 生成并输出随机数
    }
    std::cout << std::endl;
    return 0;
}

其他函数和方法

除了随机数引擎和分布函数之外,C++ 随机数库还提供了一些其他的函数和方法,例如:

  • std::generate_canonical:生成 [0, 1) 之间的均匀分布的随机数,返回类型为 double。
  • std::shuffle:将指定范围内的元素打乱顺序。
  • std::sample:从指定范围内随机抽取指定数量的元素,返回一个新的范围。
  • std::bernoulli_distribution:生成伯努利分布的随机数,即以一定概率返回 true 或 false。
  • std::binomial_distribution:生成二项分布的随机数。
  • std::geometric_distribution:生成几何分布的随机数。
  • std::negative_binomial_distribution:生成负二项分布的随机数。
  • std::poisson_distribution:生成泊松分布的随机数。
  • std::exponential_distribution:生成指数分布的随机数。

总结

C++ 随机数库提供了丰富且高效的工具,能够满足各种随机数生成需求。开发者可以根据具体应用场景选择合适的算法、分布函数和辅助函数来实现自己的需求。

注意:

  • 使用随机数引擎时,建议使用 std::random_device 来生成种子,以确保生成的随机数序列具有高熵。
  • 避免使用相同种子初始化多个随机数引擎,否则生成的随机数序列会完全相同。
C++ 随机数库:生成高质量随机数的工具

原文地址: https://www.cveoy.top/t/topic/kdeZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录