C 11 中的随机数生成:简单分解
C 11 引入了一组强大的随机数生成功能,为程序员提供了用于生成具有各种分布的随机数的综合工具集。理解这些功能可能会令人畏惧,但我们会将它们分解为简单的概念以阐明它们的用途。
什么是引擎和发行版?
-
引擎:随机数生成的核心是引擎的概念。引擎是一个生成器,它产生一系列随机出现的数字。 C 11 提供了多种引擎,例如 Mersenne Twister,可以保证长时间的伪随机数。
-
分布: 分布将引擎的统一输出转换为特定分布。例如,均匀分布为指定范围内的所有元素分配相等的概率,而正态分布则模拟众所周知的钟形曲线。
如何生成随机数
生成随机数涉及三个关键步骤:
-
设置引擎: 实例化引擎,例如 std::mt19937 rng。
-
为引擎设定种子: 使用种子值初始化引擎,例如 rng.seed(seed_val)。
-
创建分布:定义所需的分布,例如 std::uniform_int_distribution uint_dist.
-
生成随机数:利用引擎生成指定分布范围内的随机数,例如 uint_dist(rng).
如何他们做吗有效吗?
伪随机数生成器依靠数学算法来生成在我们看来是随机的序列。它们不会产生真正的随机数,而是生成一长串通过随机性统计测试的伪随机数。
并发
确保线程安全对于随机数至关重要一代。 C 11 的随机引擎允许线程本地实例,确保每个线程都在自己独立的伪随机数序列上运行。
Misc
-
同样可能: 正确的分布确保指定范围内的所有结果具有相同的概率
-
引擎和分发: 每个引擎通常会为种子值指定推荐的结果类型,例如 MyRNG::result_type。
-
资源: 探索外部资源,例如关于 TR1 随机的 codeguru 文章和维基百科关于随机数生成的摘要,以进一步了解见解。
以上是C 11 如何使用引擎和分布简化随机数生成?的详细内容。更多信息请关注PHP中文网其他相关文章!