我已經被賦予了將Java的Java.util.Random()
移植到JavaScript的任務,並且我已經在足夠多的數字上使用Javascript中的按位運算符運行了巨大的性能命中/不準確性。一些粗略的研究表明,「JavaScript中的按位運算符本質上很慢」,因爲在內部看來,JavaScript會將其所有雙精度值轉換爲帶符號的32位整數來執行按位運算(see here以獲取更多信息。)因此,我不能做一個Java隨機數生成器的直接端口,我需要得到與Java.util.Random()
相同的數值結果。寫的東西像Javascript中的48位按位運算?
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()
中相同的值。我應該怎樣做才能做出更快速,功能性的端口?