gpt4 book ai didi

c++ - 在哪里初始化随机种子以通过多个随机模块使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:41 27 4
gpt4 key购买 nike

所以,每次我开发一些大的东西,将多个模块组合在一起构建最终功能时,我一直在想同一个问题:如果超过 1 个模块需要使用随机函数,在哪里初始化随机种子?

如果我有一个需要随机的类(例如,类通过使用 self 实现的快速排序对输入数组进行排序来初始化自身,所以我需要一个随机数来选择主元),我通常有一个私有(private)的 static bool isRandOn; 变量,所以在我开始选择随机基准之前,我会检查该变量并执行 srand(time(NULL)); 如果随机尚未打开。

如果我在一个命名空间中有大量的实用函数,我会做一件非常相似的事情:我将这样一个变量放在我的 utils 库中的一个匿名命名空间中,并或多或少地做与类相同的事情.

我遇到的问题 是在组合这些模块时。就其本身而言,我知道每个模块不会多次设置种子。但是,我希望能够一起使用我的不同数量的模块,我希望其他人能够独立于其他人使用我的一个或多个模块...

那么,处理多个需要随机种子的模块的最佳方法是什么?在每个模块中设置种子?根本不设置种子,而是记录 random 的用法,并让用户在想要使用该模块时初始化种子?第三个东西?

最佳答案

我建议使用 Boost.Random,而不是依赖于在程序级别共享的某些全局状态。

Boost.Random 有两个概念:

  • 引擎:生成随机数
  • 分布:调整引擎的结果以提供符合特定分布(正态分布、泊松分布、高斯分布...)的结果

然后每个模块可能有自己的引擎,或者实际上有几个引擎:没有特定的理由让同一引擎在同一模块内的多个不同功能之间共享。

最后一句话:无论你做什么,都要确保你有办法确定地设置种子以用于错误重现。错误重现可能受益于拥有多个引擎(部件隔离有帮助)。

关于c++ - 在哪里初始化随机种子以通过多个随机模块使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10751458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com