Thậm chí đơn giản hơn, tùy thuộc vào tốc độ của trình tạo ngẫu nhiên của bạn, bạn chỉ có thể tạo hai giá trị và tính trung bình cho chúng.
Hoặc, thậm chí đơn giản hơn, trong đó X là kết quả của rng, đầu tiên double y = double(1/x);
, x = y*[maximum return value of rng];
. Điều này sẽ cân số lượng theo cấp số nhân với số thấp hơn.
Tạo và trung bình nhiều giá trị hơn để tăng khả năng nhận các giá trị gần trung tâm hơn.
Tất nhiên, điều này chỉ hoạt động đối với các bản phân phối đường cong chuông tiêu chuẩn hoặc các phiên bản "gấp" của chúng *, nhưng với trình tạo nhanh, nó có thể nhanh hơn và đơn giản hơn so với sử dụng các hàm toán học khác nhau như sqrt.
Bạn có thể tìm thấy tất cả các loại nghiên cứu về điều này cho các đường cong xúc xắc chuông. Trên thực tế, Anydice.com là một trang web tốt tạo ra các biểu đồ cho các phương pháp gieo xúc xắc khác nhau. Mặc dù bạn đang sử dụng RNG, tiền đề là như nhau, cũng như kết quả. Vì vậy, nó là một điểm tốt để xem phân phối trước khi mã hóa nó.
* Ngoài ra, bạn có thể "gấp" phân phối kết quả dọc theo một trục bằng cách lấy trục và trừ kết quả trung bình sau đó thêm trục. Ví dụ: bạn muốn các giá trị thấp hơn trở nên phổ biến hơn và giả sử bạn muốn 15 là giá trị tối thiểu của bạn và 35 là giá trị tối đa của bạn, phạm vi 20. Vì vậy, bạn tạo và trung bình hai giá trị với phạm vi 20 ( gấp đôi phạm vi bạn muốn), sẽ đưa ra một bellcurve tập trung vào 20 (chúng tôi trừ năm ở cuối để chuyển phạm vi từ 20 đến 40, thành 15 đến 35). Lấy các số X và Y được tạo.
Số cuối cùng,
z =(x+y)/2;// average them
If (z<20){z = (20-z)+20;}// fold if below axis
return z-5;// return value adjusted to desired range
Nếu số 0 là mức tối thiểu của bạn, thậm chí tốt hơn, hãy làm điều này thay vào đó,
z= (x+y)/2;
If (z<20){z = 20-z;}
else {z = z - 20;}
return z;