TanodTools
VI

Tạo số ngẫu nhiên

Chọn một khoảng và số lượng số bạn muốn. Mỗi số được bốc đồng đều từ nguồn ngẫu nhiên an toàn của trình duyệt.

Chạy hoàn toàn trong trình duyệt của bạn

0 cho ra số nguyên.

Tối đa 10.000 số mỗi lần bốc, giới hạn dưới và trên đến 30 chữ số và đến 10 chữ số thập phân. Kết quả không được lưu; tải lại trang sẽ xóa chúng.

Cách tạo số ngẫu nhiên

  1. Nhập giá trị nhỏ nhất và lớn nhất. Cả hai đầu đều có thể xuất hiện, và số âm cũng dùng được.
  2. Đặt số lượng số bạn muốn, và đánh dấu Không lặp nếu mọi số phải khác nhau.
  3. Nhấn Tạo, rồi sao chép danh sách hoặc tải xuống dưới dạng tệp văn bản.

Vì sao cần bộ tạo an toàn, và "ngẫu nhiên" phải có nghĩa gì ở đây

Một lần bốc công bằng nghĩa là mọi giá trị được phép có khả năng như nhau và một lần bốc không cho bạn biết gì về lần kế tiếp. Math.random() nhanh nhưng thực chất là một dãy có thể đoán trước, tốt cho hiệu ứng động chứ không phải cho bốc thăm trúng thưởng. crypto.getRandomValues của trình duyệt được khởi tạo từ hệ điều hành và là nguồn đúng cho mọi việc mà người ta có thể tranh cãi.

Biến các bit ngẫu nhiên thô thành một số từ 1 đến 6 là chỗ nhiều công cụ làm sai. Một giá trị 32 bit có 4.294.967.296 khả năng, mà 6 không chia hết, nên dùng phần dư làm các mặt thấp có khả năng cao hơn một chút. Cách sửa là rejection sampling: bội số lớn nhất của kích thước khoảng nhỏ hơn 232 là ngưỡng cắt, và lần bốc vượt ngưỡng sẽ bị bỏ và bốc lại. Với các khoảng rộng hơn 32 bit, công cụ bốc đúng số bit cần thiết và loại mọi giá trị vượt khoảng, dùng số nguyên lớn để các giá trị gần 9.007.199.254.740.991 vẫn chính xác.

Số thập phân dùng cùng ý tưởng trên một lưới. Với hai chữ số thập phân, khoảng từ 0 đến 5 được coi là các số nguyên từ 0 đến 500, một số được bốc rồi đặt lại dấu thập phân, nhờ đó mọi giá trị trên lưới có khả năng như nhau thay vì làm tròn một số liên tục.

Mẹo

  • Để chọn người thay vì số, hãy dán danh sách vào Chọn tên ngẫu nhiên.
  • Cần một bí mật chứ không phải một con số? Tạo mật khẩu dùng cùng nguồn ngẫu nhiên với các nhóm ký tự.
  • Muốn một mã định danh duy nhất thay vì một số nhỏ? Hãy thử Tạo UUID.

Câu hỏi thường gặp

Các số có thật sự ngẫu nhiên không?

Chúng đến từ crypto.getRandomValues, cùng bộ tạo an toàn mà trình duyệt dùng cho khóa mã hóa, chứ không phải từ Math.random. Mỗi giá trị trong khoảng của bạn có khả năng như nhau. Bộ tạo này đủ tốt cho trò chơi, rút thăm và chọn mẫu; nó chưa được kiểm định cho xổ số có quản lý.

Modulo bias là gì, và công cụ này có không?

Lấy một số 32 bit ngẫu nhiên rồi giữ phần dư khi chia cho kích thước khoảng sẽ làm một số kết quả có khả năng cao hơn chút ít bất cứ khi nào khoảng không chia hết 232. Công cụ này bỏ mọi lần bốc rơi vào phần dư không đều và bốc lại, nên mọi giá trị có cùng xác suất chính xác. Điều đó cũng đúng với các khoảng rất lớn, được xử lý bằng số nguyên lớn.

"Không lặp" hoạt động thế nào, và khi nào thất bại?

Công cụ bốc từng số mới và bỏ qua số nào đã xuất hiện, hoặc với khoảng nhỏ thì xáo trộn cả khoảng và lấy vài số đầu. Nếu bạn yêu cầu nhiều số khác nhau hơn số giá trị trong khoảng, chẳng hạn 7 số từ 1 đến 6, nó sẽ báo cho bạn thay vì lặp mãi.

Chuyện gì xảy ra nếu giá trị nhỏ nhất lớn hơn giá trị lớn nhất?

Hai giá trị được đổi chỗ và dòng kết quả sẽ cho biết. Nhập 10 và 1 cho kết quả giống như nhập 1 và 10.

Số thập phân hoạt động thế nào?

Đặt số chữ số thập phân là 2 thì khoảng từ 0 đến 1 thành 101 giá trị 0,00, 0,01 đến 1,00, mỗi giá trị có khả năng như nhau. Kết quả luôn hiển thị đủ số chữ số, nên 0,50 vẫn là 0,50. Bản thân các giới hạn không thể có nhiều chữ số thập phân hơn số bạn đã chọn.

Tôi có thể dùng để chọn số xổ số hay tung xúc xắc không?

Để tung xúc xắc, dùng 1 đến 6. Với vé xổ số, đánh dấu Không lặp, ví dụ 6 số từ 1 đến 49, sắp xếp từ nhỏ đến lớn. Chọn ngẫu nhiên không cho bạn cơ hội tốt hơn bất kỳ bộ số nào khác. Các số đã chọn không được lưu hay gửi đi đâu cả.