Jeszcze prościej, w zależności od prędkości generatora losowego, możesz po prostu wygenerować dwie wartości i uśrednić je.
Albo, jeszcze bardziej proste, gdzie X jest wynikiem RNG, pierwszy double y = double(1/x);
, x = y*[maximum return value of rng];
. To zrównoważy liczby wykładniczo do niższych liczb.
Generuj i uśredniaj więcej wartości, aby zwiększyć prawdopodobieństwo zbliżenia wartości do centrum.
Oczywiście działa to tylko w przypadku standardowych rozkładów krzywych dzwonkowych lub ich „złożonych” wersji *, ale w przypadku szybkiego generatora może być szybsze i prostsze niż używanie różnych funkcji matematycznych, takich jak sqrt.
Możesz znaleźć wszelkiego rodzaju badania tego dla krzywych dzwonka do kości. W rzeczywistości Anydice.com to dobra strona, która generuje wykresy dla różnych metod rzucania kostką. Chociaż używasz RNG, założenie jest takie samo, jak wyniki. Jest to więc dobre miejsce, aby zobaczyć rozkład, zanim jeszcze go zakodujesz.
* Ponadto można „złożyć” rozkład wyników wzdłuż osi, biorąc oś i odejmując uśredniony wynik, a następnie dodając oś. Na przykład chcesz, aby niższe wartości były bardziej powszechne, i powiedzmy, że chcesz, aby 15 było wartością minimalną, a 35 wartością maksymalną, w zakresie 20. Tak więc generujesz i uśredniasz razem dwie wartości o zakresie 20 ( dwukrotność żądanego zakresu), co da krzywą dzwonkową wyśrodkowaną na 20 (odejmujemy pięć na końcu, aby zmienić zakres z 20 na 40, na 15 na 35). Weź wygenerowane liczby X i Y.
Ostateczna liczba,
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
Jeśli zero jest twoim minimum, a nawet lepiej, zrób to zamiast tego,
z= (x+y)/2;
If (z<20){z = 20-z;}
else {z = z - 20;}
return z;