Javascript中的48位按位操作?

Javascript中的48位按位操作?,javascript,random,bitwise-operators,Javascript,Random,Bitwise Operators,我被赋予了将Java的Java.util.Random()移植到JavaScript的任务,并且在JavaScript中对足够大的数字使用位运算符时,我遇到了巨大的性能影响/不准确。一些粗略的研究表明,“JavaScript中的按位运算符天生就很慢”,因为在内部,JavaScript似乎会将其所有的双精度值转换为有符号的32位整数来执行按位运算(更多信息)。因此,我无法直接连接Java随机数生成器,我需要得到与Java.util.Random()相同的数值结果。写一些像 this.next

我被赋予了将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);
  };
this.next=函数(位){
如果(!位){
位=48;
}
this.seed=(this.seed*25214903917+11)和((1>>(48位);
};
(这几乎是
Java.util.Random()
)代码的直接端口,无法正常工作,因为Javascript无法对那个么大的整数执行位操作。)


我发现我可以使用Lehmer算法在32位空间中生成一个可播种的随机数生成器,但诀窍是我需要获得与
Java.util.random()相同的值
。我应该做些什么来创建一个更快、功能更强大的端口?

48位位位操作在JavaScript中是不可能的。不过,您可以使用两个数字来模拟它。

另一种方法是使用一个包含48个布尔值的布尔数组,然后自己实现移位。不过,我不知道这是否更快;但我对此表示怀疑,因为所有的布尔值都是布尔值以双精度存储。

请记住,位移位直接等于乘或除2的幂

1 << x == 1 * Math.pow(2,x)
1 32
,一旦您考虑到需要支持更高位计数的额外代码,但您必须进行一些分析才能找到答案。

而不是
foo&((1