伪随机的一对一int32-> int32函数
问题内容:
我正在寻找一个int32-> int32函数
- 双射(一对一对应)
- 至少在一个方向上计算便宜
- 将递增的序列0、1、2、3,…转换为看起来像一个良好的伪随机序列的序列(当参数改变很小的数量(没有明显的模式)时,会翻转半位)
问题答案:
乘以一个大的奇数,然后将异或乘以另一个。
Bijection:奇数具有2的乘法逆模幂,因此乘以反即可撤消乘法。当然,xor被另一个xor撤消。
基本上,这就是线性同余伪随机数生成器的工作方式。