Trong 6 năm tôi đã có một trang random number generator trên trang web của mình. Trong một thời gian dài, đó là kết quả đầu tiên hoặc thứ hai trên Google cho "trình tạo số ngẫu nhiên" và đã được sử dụng để quyết định hàng chục, nếu không phải hàng trăm cuộc thi và bản vẽ trên diễn đàn thảo luận và blog (tôi biết vì tôi thấy các liên kết giới thiệu trong nhật ký web và thường đi xem).Math.random của JavaScript ngẫu nhiên như thế nào?
Hôm nay, một người nào đó đã gửi email cho tôi để cho tôi biết nó có thể không giống như tôi nghĩ. Cô đã thử tạo ra các số ngẫu nhiên rất lớn (ví dụ: từ 1 đến 10000000000000000000) và nhận thấy rằng chúng hầu như luôn có cùng số chữ số. Thật vậy, tôi bọc chức năng trong một vòng lặp để tôi có thể tạo ra hàng nghìn con số và chắc chắn đủ, với số lượng rất lớn, biến thể chỉ khoảng 2 đơn vị độ lớn.
Tại sao?
Dưới đây là phiên bản lặp, vì vậy bạn có thể thử nó ra cho chính mình:
http://andrew.hedges.name/experiments/random/randomness.html
Nó bao gồm cả việc thực hiện đơn giản lấy từ Mozilla Developer Network và một số mã từ năm 1997 mà tôi swiped khỏi một trang web không còn tồn tại ("Randomizer 1.3" của Paul Houle). Xem nguồn để xem mỗi phương thức hoạt động như thế nào.
Tôi đã đọc here và elsewhere về Mersenne Twister. Điều tôi quan tâm là lý do tại sao sẽ không có sự thay đổi lớn hơn trong các kết quả từ hàm tích hợp sẵn của JavaScript Math.random. Cảm ơn!
sarnath'd bởi * mọi * – annakata
Tôi không nhận được nó. "sarnath'd"? –
"sarnath'd" như trong, bị đánh vào cú đấm, hoặc trong trường hợp này, câu trả lời – maetl