了解这个16位PRNG

时间:2013-08-03 12:38:38

标签: c 16-bit prng unsigned-integer

我找到了this algorithm的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(将使用种子预先设置),然后使用下一个随机值覆盖它?

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

1 个答案:

答案 0 :(得分:3)

变量xy在你暗示的意义上并不是真正的“本地”功能。它们被声明为static,这意味着当它们的范围是函数的本地时(它们不能通过名称从外部访问),它们的生存期是整个计划。所以他们会在调用之间保留他们的值,这意味着两件事:

  • x和y实际上是PRNG州。
  • 该功能不是线程安全的。