Tôi đã được giao nhiệm vụ chuyển Java Java.util.Random()
sang JavaScript và tôi đã chạy trên một lần truy cập/không chính xác hiệu suất lớn bằng cách sử dụng toán tử bitwise trong Javascript với số lượng đủ lớn. Một số nghiên cứu cho rằng "các toán tử bit trong JavaScript vốn chậm," bởi vì trong nội bộ nó xuất hiện rằng JavaScript sẽ đúc tất cả các giá trị kép của nó thành các số nguyên 32 bit đã ký để thực hiện các thao tác bitwise (see here để biết thêm về điều này). , Tôi không thể thực hiện cổng trực tiếp của trình tạo số ngẫu nhiên Java và tôi cần có cùng kết quả dạng số như Java.util.Random()
. Viết cái gì đó nhưHoạt động bitwise 48 bit trong Javascript?
this.next = function(bits) {
if (!bits) {
bits = 48;
}
this.seed = (this.seed * 25214903917 + 11) & ((1 << 48) - 1);
return this.seed >>> (48 - bits);
};
(mà là một cảng gần như trực tiếp của Java.util.Random()
) mã sẽ không hoạt động đúng, vì Javascript không thể làm hoạt động Bitwise trên một số nguyên kích thước đó.)
tôi đã tìm ra rằng tôi chỉ có thể tạo một bộ tạo số ngẫu nhiên có thể gieo hạt trong không gian 32 bit bằng cách sử dụng thuật toán Lehmer, nhưng mẹo là tôi cần phải có cùng giá trị như với Java.util.Random()
. Tôi nên làm gì để tạo cổng nhanh hơn, chức năng hơn?