Tôi gặp sự cố khi tạo số ngẫu nhiên được phân phối bình thường (mu = 0 sigma = 1) bằng JavaScript.Bias trong ngẫu nhiên số phân phối bình thường (javascript)
Tôi đã thử phương pháp Box-Muller và ziggurat, nhưng giá trị trung bình của chuỗi số được tạo ra là 0.0015 hoặc -0.0018 - rất xa so với số không !! Hơn 500.000 con số được tạo ngẫu nhiên, đây là một vấn đề lớn. Nó phải gần bằng không, giống như 0.000000000001.
Tôi không thể tìm hiểu xem đó có phải là vấn đề về phương pháp hay không hoặc được xây dựng trong JavaScript Math.random()
không tạo ra số lượng phân phối đồng đều chính xác hay không.
Có ai đó đã tìm thấy sự cố tương tự không?
Ở đây bạn có thể tìm thấy chức năng ziggurat:
Và dưới đây là mã cho Box-Muller:
function rnd_bmt() {
var x = 0, y = 0, rds, c;
// Get two random numbers from -1 to 1.
// If the radius is zero or greater than 1, throw them out and pick two
// new ones. Rejection sampling throws away about 20% of the pairs.
do {
x = Math.random()*2-1;
y = Math.random()*2-1;
rds = x*x + y*y;
}
while (rds === 0 || rds > 1)
// This magic is the Box-Muller Transform
c = Math.sqrt(-2*Math.log(rds)/rds);
// It always creates a pair of numbers. I'll return them in an array.
// This function is quite efficient so don't be afraid to throw one away
// if you don't need both.
return [x*c, y*c];
}
Sẽ dễ dàng hơn nếu bạn đăng mã của mình. –