繁体   English   中英

了解这个16位PRNG

[英]Understanding this 16-bit PRNG

我发现这个算法适用于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是一个临时变量?

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

  • x和y实际上是PRNG状态。
  • 该函数不是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM