Навіть простіше, залежно від швидкості вашого випадкового генератора, ви можете просто генерувати два значення та середньостатистично їх.
Або, ще простіше, де X є результатом ГСЧ, по- перше double y = double(1/x);
, x = y*[maximum return value of rng];
. Це призведе до ваги чисел в експоненціальному відношенні до нижчих чисел.
Згенеруйте та середнє значення більше, щоб збільшити ймовірність наближення значень до центру.
Звичайно, це працює лише для стандартних розподілів кривих дзвіночків або "складених" їх версій *, але з швидким генератором це може бути швидше і простіше, ніж використання різних математичних функцій, таких як sqrt.
Ви можете знайти всілякі дослідження цього щодо кривих дзвіночків з кістки. Насправді Anydice.com - це хороший сайт, який генерує графіки для різних методів прокатки кісток. Незважаючи на те, що ви використовуєте RNG, приміщення є таким же, як і результати. Тож це гарне місце для перегляду розподілу, перш ніж його навіть кодувати.
* Крім того, ви можете "скласти" розподіл результатів по осі, взявши вісь і віднімаючи усереднений результат, потім додаючи вісь. Наприклад, ви хочете, щоб більш низькі значення були більш поширеними, і дозволяємо сказати, що ви хочете, щоб 15 було вашим мінімальним значенням, а 35 - вашим максимальним значенням, діапазон 20. Таким чином, ви генеруєте і середнє значення двох значень з діапазоном 20 ( вдвічі більше потрібного діапазону), що дасть дзвінку з центром на 20 (віднімаємо п’ять в кінці, щоб зрушити діапазон з 20 на 40, на 15 до 35). Візьміть утворені числа X і Y.
Кінцевий номер,
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
Якщо нуль - це ваш мінімум, ще краще, зробіть це замість цього,
z= (x+y)/2;
If (z<20){z = 20-z;}
else {z = z - 20;}
return z;