【问题标题】:default_random_engine isn't randomizing values for medefault_random_engine 没有为我随机化值
【发布时间】:2013-09-30 22:44:00
【问题描述】:

当我运行我的函数时,我的 xy 值在每次运行时都保持不变。我不确定我是否错误地使用了 default_random_engine。如何使用dist(engine) 获取我的xy 值以随机化并且每次程序执行时输出都不相同?

【问题讨论】:

  • 忘记default_random_engine,它包含在标准中是一个错误。请改用mt19937mt19937_64
  • 显示一些代码。没有它,就无法说出您是否“错误地使用了 default_random_engine”。

标签: c++ random random-seed


【解决方案1】:

“种子”是一种为伪数生成器提供“随机性”的东西。如果您使用相同的种子对其进行初始化,您将获得相同的“随机”模式。

在这里,您可能一直在传递相同的种子。

也许你应该像这样定义你的函数:

long double fn( long reps, default_random_engine & engine )

在运行程序时声明随机数生成器的单个实例,并为其播种一次,其值在程序启动时始终不同(例如系统时间)。然后,将生成器传递给任何需要生成随机数的函数。

【讨论】:

  • 那么,如果我想通过生成器传递种子 1-10,我该怎么做呢?
  • 我可能误解了你的问题吗?最初看起来您想要相同的种子。你是说无论你使用什么种子,你都会得到相同的序列?还是您只想使用 10 种不同的种子,但每次运行程序时它们都不同?
  • 抱歉,可能不清楚。我想使用 10 种不同的种子,特别是 1-10 种。
  • 您说:如何让我的 x 和 y 值随机化,而不是每次程序执行时都输出相同的值?。答案是每次都使用不同的种子。如果您强制您的程序仅使用种子 1-10(eg seed = 1 + (time(0) % 10);),那么您的程序将只有 10 个唯一的随机序列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2014-11-20
  • 2023-03-19
  • 1970-01-01
  • 2013-07-12
  • 2013-09-29
  • 1970-01-01
相关资源
最近更新 更多