【发布时间】:2011-02-04 06:06:15
【问题描述】:
我被赋予了将 Java 的 Java.util.Random() 移植到 JavaScript 的任务,并且在足够大的数字上使用 Javascript 中的位运算符时,我遇到了巨大的性能损失/不准确。一些粗略的研究表明“JavaScript 中的按位运算符天生就很慢”,因为在内部看来,JavaScript 会将其所有双精度值转换为有符号的 32 位整数来执行按位运算(see here 了解更多信息。)因为其中,我无法直接移植 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() 相同的值。我应该怎么做才能制作一个更快、功能更强大的端口?
【问题讨论】:
标签: javascript random bitwise-operators