【问题标题】:Need help converting C Mersenne twister implementation to be useful to me需要帮助将 C Mersenne twister 实现转换为对我有用
【发布时间】:2012-03-22 20:36:30
【问题描述】:

我正在使用 this 实现 Mersenne twister 来编写我正在编写的菱形正方形地形生成器。使用单独的实现而不是内置的 rand() 的要点是我希望每次都使用相同的种子生成相同的地图。 Diamond-square 需要在每个像素上添加一个随机误差,所以我需要从一个种子中生成很多很多随机数。 Mersenne twister 对此有好处,但据我所知,这个实现只生成一个随机数。我已将 mt_init() 中的 rand() 替换为整数参数。但是,我无法进一步说明代码的开头或结尾,所以我必须求助于您:我应该采取哪些步骤才能使 mt_random(n) 返回它所带出的 Mersenne twister 系列中的第 n 个随机数?

【问题讨论】:

  • 我认为您没有正确使用代码。 PRNG 通常在每次调用时返回 next 值,即参数(如果存在用于 scaling)。
  • 为什么不直接使用srandrand 来设置种子并以这种方式获得可重复的伪随机序列?
  • @Paul R:也许 OP 希望序列在不同的 C 实现中可重复。
  • @caf: 好点 - 这很有意义

标签: c random implementation mersenne-twister


【解决方案1】:

我会重新考虑使用randsrand。如果您想要一个独立的随机函数,其状态不受正常调用 rand 的影响,您可以使用类似这样的函数。

unsigned int my_seed = 42;

int my_rand()
{
    srand(my_seed);
    return my_seed = rand();
}

【讨论】:

    【解决方案2】:

    如果您需要更多随机数,请继续拨打mt_random 多次。

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多