伪随机的一对一int32-> int32函数


问题内容

我正在寻找一个int32-> int32函数

  • 双射(一对一对应)
  • 至少在一个方向上计算便宜
  • 将递增的序列0、1、2、3,…转换为看起来像一个良好的伪随机序列的序列(当参数改变很小的数量(没有明显的模式)时,会翻转半位)

问题答案:

乘以一个大的奇数,然后将异或乘以另一个。

Bijection:奇数具有2的乘法逆模幂,因此乘以反即可撤消乘法。当然,xor被另一个xor撤消。

基本上,这就是线性同余伪随机数生成器的工作方式。