Vẫn có cảm giác cột đầu tiên được ưu tiên hơn sư phụ à!
Công thức Rand()^5 nhằm giải quyết việc anh Bill ưu tiên các số tổng lớn hơn 150 mà ndu! Nghĩa là với 4 cột thì xác suất cả 4 số đều nhỏ (để cho tổng số nhỏ) là rất thấp so với xác suất để cho cả 4 ô đều lớn (để cho tổng số lớn). Nghĩa là trong trường hợp này
phân bố ngẫu nhiên không đồng đều.
Việc luỹ thừa Rand() lên nhằm
phân bố không đồng đều ngược lại để bù vào.
Còn biện pháp của ndu là nhằm cải thiện việc phân bố theo cột: Hiển nhiên là cột nào tính trước sẽ ưu tiên hơn nhưng không thoát ra ngoài cái
"phân bố ngẫu nhiên không đồng đều" nói trên.
Để xét sự phân bố theo khoảng từ 0 đến 1 của Rand(), anh đã có cột count() để kiểm tra.
Để xét sự phân bô theo cột, ta tính tổng từng cột để kiểm tra (xem file).
Kết quả:
Cách của anh thì giải quyết vấn đề 1, vấn đề 2 vẫn còn.
Cách của ndu giải quyết vấn đề 2, vấn đề 1 còn nguyên, ý tác giả muốn phân bố tổng đều từ 1x đến 16x cơ.
Vậy kết hợp 2 cách, dùng VBA của ndu, chỉ thêm đúng 2 ký tự "
^5" vào, sẽ thấy sự khác biệt.
Lý do ^5 mà không phải số khác: Đã test tăng dần từ 2 lên, tới 5 là đạt yêu cầu. Test theo nguyên lý đã nói ở bài trên.
Lạ 1 điều là VBA chạy chậm hơn công thức.
Xem trong file, với các ô kiểm tra ở sheet "2 cách" sẽ so sánh được hơn và kém trong việc giải quyết 2 vấn đề, mỗi cách chỉ giải quyết 1.
Sheet "1 cách kết hợp" là gần như tối ưu.