Trong 6 năm, tôi đã có một trang tạo số ngẫu nhiên 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 các diễn đàn và blog thảo luận (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 qua).
Hôm nay, ai đó đã gửi email cho tôi để nói với tôi rằng nó có thể không ngẫu nhiên như tôi nghĩ. Cô ấy đã thử tạo 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 một số chữ số. Thật vậy, tôi đã quấn hàm 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, đối với những con số rất lớn, sự thay đổi chỉ khoảng 2 bậc của độ lớn.
Tại sao?
Đây là phiên bản lặp lại, vì vậy bạn có thể tự mình thử:
http://andrew.hedges.name/experiments/random/randomness.html
Nó bao gồm cả cách triển khai đơn giản được lấy từ Mạng nhà phát triển Mozilla và một số mã từ năm 1997 mà tôi đã xóa trên một trang web không còn tồn tại ("Bộ lấy ngẫu nhiên trung tâm 1.3" của Paul Houle). Xem nguồn để xem cách hoạt động của từng phương pháp.
Tôi đã đọc ở đây và những nơi khác về Mersenne Twister. Điều tôi quan tâm là tại sao sẽ không có sự thay đổi lớn hơn trong kết quả từ hàm Math.random tích hợp sẵn của JavaScript . Cảm ơn!