1

我发现这个算法适用于 16 位 PRNG。我不明白 x、y 和 t 是什么。我想要做的是使用 16 位种子生成多个随机 16 位值。

如果我是正确的,那么该网页中显示的函数(引用如下)只是伪代码,因为就目前而言,它总是会生成相同的值,因为 x 和 y 是函数的局部变量?

uint16_t rnd_xorshift_32() {
  static uint16_t x=1,y=1;
  uint16_t t=(x^(x<<5)); 
  x=y; 
  return y=(y^(y>>1))^(t^(t>>3));
}

如何修改上述内容以读取全局变量uint_16_t random(将使用种子预先设置),然后用下一个随机值覆盖它?

编辑:谢谢,所以我对静态变量的理解已得到纠正。我这样说是否正确,x并且y最初设置为种子(1在上面的代码中都是),然后被修改为后续的随机值?t是一个临时变量吗?

4

1 回答 1

3

x在您暗示的意义上,这些变量y并不是函数的真正“本地”。它们被声明为static这意味着虽然它们的范围是函数的本地(它们不能从外部通过名称访问),但它们的生命周期是整个程序的生命周期。所以他们将在调用之间保留他们的值,这意味着两件事:

  • x 和 y 实际上是 PRNG 状态。
  • 该函数不是线程安全的。
于 2013-08-03T12:42:28.513 回答