我被赋予了将 Java 移植Java.util.Random()
到 JavaScript 的任务,并且在足够大的数字上使用 Javascript 中的位运算符时,我遇到了巨大的性能损失/不准确性。一些粗略的研究表明“JavaScript 中的按位运算符本质上很慢”,因为在内部看来,JavaScript 会将其所有双精度值转换为有符号的 32 位整数来执行按位运算(有关此内容的更多信息,请参见此处。)因为这个,我不能直接移植 Java 随机数生成器,我需要得到与Java.util.Random()
. 写类似的东西
this.next = function(bits) {
if (!bits) {
bits = 48;
}
this.seed = (this.seed * 25214903917 + 11) & ((1 << 48) - 1);
return this.seed >>> (48 - bits);
};
(这几乎是 的直接端口Java.util.Random()
)代码将无法正常工作,因为 Javascript 无法对这样大小的整数进行按位运算。)
我发现我可以使用 Lehmer 算法在 32 位空间中创建一个可种子随机数生成器,但诀窍是我需要获得与使用Java.util.Random()
. 我应该怎么做才能制作一个更快、功能更强大的端口?