Cách Doxucxac tạo kết quả ngẫu nhiên
Mỗi lượt đổ xúc xắc online trên Doxucxac đi qua ba bước: chọn kết quả bằng bộ sinh số ngẫu nhiên mật mã, mô phỏng vật lý để diễn lại cú ném, rồi hiển thị kết quả. Trang này giải thích từng bước và công bố kết quả tự kiểm định thống kê của chúng tôi, kèm mã để bạn tự chạy lại.
1. Kết quả được chọn trước, bằng bộ sinh số mật mã
Kết quả của mỗi lượt đổ được chọn bằng crypto.getRandomValues() — bộ sinh số ngẫu nhiên an toàn mật mã (CSPRNG) có sẵn trong trình duyệt, cùng loại dùng để tạo khoá bảo mật. Math.random() chỉ được dùng cho phần trình diễn như âm thanh, hiệu ứng hay tư thế ban đầu của xúc xắc, không bao giờ dùng để quyết định mặt ngửa.
Một số 32-bit có 4.294.967.296 giá trị — con số không chia hết cho 6, 10 hay 20. Nếu chỉ lấy phần dư, vài mặt sẽ nhỉnh hơn các mặt khác một chút (gọi là modulo bias). Doxucxac loại bỏ sai lệch này bằng rejection sampling: số nào rơi vào phần dư thừa ở cuối dải sẽ bị bỏ để lấy số mới. Đây là toàn bộ hàm chọn mặt đang chạy trên website:
const buf = new Uint32Array(1);
function randInt(n) {
const limit = Math.floor(0x100000000 / n) * n;
let x;
do {
crypto.getRandomValues(buf);
x = buf[0];
} while (x >= limit);
return 1 + (x % n);
}
Mỗi viên xúc xắc trong một lượt được gọi hàm này độc lập. Kết quả được chọn trước khi xúc xắc rời tay.
2. Vật lý 3D chỉ diễn lại kết quả
Ở chế độ hiệu ứng Cao, cú ném được mô phỏng bằng thư viện vật lý cannon-es: xúc xắc có khối lượng, va vào thành khay, va vào nhau rồi dừng lại. Sau khi mô phỏng xong, chúng tôi xoay nhãn của từng viên theo một phép đối xứng của chính khối đó, để mặt ngửa lên mang đúng giá trị đã chọn ở bước 1. Hình dạng, quỹ đạo và tiếng va chạm không thay đổi.
Vì vậy xác suất hoàn toàn do bước 1 quyết định — không phụ thuộc lực ném, góc ném, tốc độ máy hay việc bạn giữ nút Đổ lâu bao nhiêu khi gieo xúc xắc. Chế độ Thấp (xúc xắc CSS, không dùng vật lý) gọi cùng một hàm chọn mặt.
3. Kết quả tự kiểm định
Ngày 01/10/2026, chúng tôi chạy hàm randInt ở trên trong Node.js v22.23.2 và dùng kiểm định chi bình phương (χ²) để so với phân phối lý thuyết: một triệu lượt D6, một triệu lượt D20, và một triệu ván ba viên D6 (ba triệu lần gọi hàm) để thống kê tổng điểm và tài xỉu. Giá trị p lớn hơn 0,05 nghĩa là không có bằng chứng thống kê cho thấy kết quả bị lệch.
Đây là tự kiểm định trên hàm chọn mặt, chưa phải kiểm định độc lập và không bao gồm phần hiển thị 3D. Bạn có thể tải script kiểm định (chạy bằng Node.js 20 trở lên) và số liệu gốc để tự chạy lại; mỗi lần chạy cho số khác nhau nhưng các kết luận phải tương tự.
Một viên D6 — 1.000.000 lượt
| Mặt | Số lần | Tỷ lệ |
|---|---|---|
| 1 | 166.628 | 16,663% |
| 2 | 166.621 | 16,662% |
| 3 | 166.973 | 16,697% |
| 4 | 166.942 | 16,694% |
| 5 | 166.495 | 16,650% |
| 6 | 166.341 | 16,634% |
χ² = 1,85 với 5 bậc tự do, p = 0,87. Đây cũng là hàm tạo kết quả cho mỗi viên xúc xắc 6 mặt bạn đổ trên trang chủ.
Các phép thử khác
| Phép thử | Kết quả | χ² (bậc tự do) | p |
|---|---|---|---|
| Một viên D20 | Mỗi mặt từ 4,948% đến 5,039% (lý thuyết 5%) | 24,15 (19) | 0,19 |
| Tổng ba viên D6 | 16 giá trị tổng từ 3 đến 18 khớp tỷ lệ của 216 tổ hợp | 11,80 (15) | 0,69 |
Tài xỉu (luật Bộ ba)
| Kết quả | Đo được | Lý thuyết |
|---|---|---|
| Tài (11–17) | 48,695% | 48,611% |
| Xỉu (4–10) | 48,499% | 48,611% |
| Bộ ba | 2,805% | 2,778% |
Các chênh lệch dưới 0,12 điểm phần trăm nằm trong dao động tự nhiên của một triệu ván.
4. Điều kiểm định không chứng minh được
- Kiểm định thống kê chỉ cho thấy không có dấu hiệu lệch; không phép thử nào chứng minh được sự ngẫu nhiên tuyệt đối.
- Bộ sinh số chạy trong trình duyệt của bạn; kết quả không được gửi tới hay quyết định bởi máy chủ của Doxucxac.
- Mỗi lượt độc lập với các lượt trước. Lịch sử và thống kê trong ứng dụng chỉ ghi lại những gì đã xảy ra, không dự đoán được lượt tiếp theo.
5. Tự quan sát trong ứng dụng
Mở Thống kê trong bảng cài đặt để xem tần suất các mặt của tối đa 100 lượt gần nhất với cùng cấu hình. Với cỡ mẫu nhỏ như vậy, các cột có thể còn chênh nhau đáng kể — đó là dao động bình thường với mọi viên xúc sắc, từ 3 đến 20 mặt. Muốn kiểm tra trên hàng triệu lượt, hãy dùng script ở mục 3. Nếu phát hiện điều bất thường, hãy báo cho chúng tôi.