Công thức tung xúc xắc?
Math.floor(Math.random() * 6) + 1 tạo số nguyên 1-6 đều nhau. Với tung đồng xu dùng Math.round(Math.random()) để được 0 hoặc 1.
Tạo số ngẫu nhiên với phạm vi và số lượng tùy chỉnh
Là số giả ngẫu nhiên với phân phối thống kê tốt, nhưng có thể đoán được nếu biết hạt giống. Dùng crypto.getRandomValues() cho bảo mật — nó lấy entropy từ hệ điều hành.
Math.floor(Math.random() * 6) + 1 tạo số nguyên 1-6 đều nhau. Với tung đồng xu dùng Math.round(Math.random()) để được 0 hoặc 1.
Dùng Fisher-Yates trên mảng [1..45], lấy 6 phần tử đầu. Đây cho ra tổ hợp hoàn toàn ngẫu nhiên không trùng lặp.
Máy tính thường dùng "số ngẫu nhiên giả" — Math.random() dùng thuật toán tất định dựa trên hạt giống để tạo ra dãy trông có vẻ ngẫu nhiên. Số ngẫu nhiên thật cần entropy từ hiện tượng vật lý như phân rã phóng xạ hay nhiễu nhiệt. Với game và mô phỏng, số giả là đủ; nhưng trong mật mã học, sự phân biệt này rất quan trọng.
Nếu kẻ tấn công xác định được hạt giống của Math.random(), họ có thể tái tạo tất cả giá trị "ngẫu nhiên" — bao gồm token, session ID và link đặt lại mật khẩu. Web Crypto API với crypto.getRandomValues() sử dụng pool entropy của hệ điều hành, phù hợp cho ứng dụng nhạy cảm bảo mật. Bất cứ khi nào cần giá trị không đoán được, hãy dùng crypto API.
Fisher-Yates duyệt mảng từ phần tử cuối trở về đầu, ở mỗi bước hoán đổi phần tử hiện tại với phần tử ở vị trí ngẫu nhiên chưa xử lý, độ phức tạp O(n). Cách tiếp cận đơn giản "tạo rồi kiểm tra trùng lặp" sẽ chậm dần khi gần đạt giới hạn, còn Fisher-Yates luôn chạy tuyến tính và là nền tảng của các thuật toán xáo bài hiện đại.
Bộ tạo số ngẫu nhiên tốt tạo phân phối đều, mỗi giá trị trong khoảng có xác suất xuất hiện bằng nhau. Công thức số nguyên: Math.floor(Math.random() * (max - min + 1)) + min. Khi mô phỏng cần phân phối chuẩn hay phân phối Poisson để mô phỏng hiện tượng tự nhiên, cần thêm các phép biến đổi như Box-Muller.
Lợi thế nhà cái trong casino đến từ thiết kế toán học, không phải gian lận số ngẫu nhiên. Bánh roulette có 37 ô (0-36), khi ra số 0 nhà cái thu hết cược, tạo ra lợi thế 2.7% bất kể độ ngẫu nhiên hoàn hảo đến đâu. Cờ bạc trực tuyến yêu cầu bộ tạo số ngẫu nhiên được chứng nhận bởi bên thứ ba.