Il modo migliore per farlo è generare un numero casuale che sia distribuito equamente in un determinato insieme di numeri, quindi applicare una funzione di proiezione all'insieme tra 0 e 100 in cui è più probabile che la proiezione colpisca i numeri desiderati.
In genere il modo matematico per raggiungere questo obiettivo è tracciare una funzione di probabilità dei numeri desiderati. Potremmo usare la curva a campana, ma per semplificare il calcolo basta lavorare con una parabola capovolta.
Facciamo una parabola in modo tale che le sue radici siano a 0 e 100 senza inclinarla. Otteniamo la seguente equazione:
f(x) = -(x-0)(x-100) = -x * (x-100) = -x^2 + 100x
Ora, tutta l'area sotto la curva tra 0 e 100 è rappresentativa del nostro primo set in cui vogliamo che vengano generati i numeri. Lì, la generazione è completamente casuale. Quindi, tutto ciò che dobbiamo fare è trovare i limiti del nostro primo set.
Il limite inferiore è, ovviamente, 0. Il limite superiore è l'integrale della nostra funzione a 100, che è
F(x) = -x^3/3 + 50x^2
F(100) = 500,000/3 = 166,666.66666 (let's just use 166,666, because rounding up would make the target out of bounds)
Quindi sappiamo che dobbiamo generare un numero compreso tra 0 e 166.666. Quindi, dobbiamo semplicemente prendere quel numero e proiettarlo sul nostro secondo set, che è tra 0 e 100.
Sappiamo che il numero casuale che abbiamo generato è parte integrante della nostra parabola con un input x compreso tra 0 e 100. Ciò significa che dobbiamo semplicemente supporre che il numero casuale sia il risultato di F (x) e risolvere per x.
In questo caso, F (x) è un'equazione cubica e, nella forma F(x) = ax^3 + bx^2 + cx + d = 0
, sono vere le seguenti affermazioni:
a = -1/3
b = 50
c = 0
d = -1 * (your random number)
Risolvendo questo per x si ottiene il numero casuale effettivo che si sta cercando, che è garantito essere nell'intervallo [0, 100] e una probabilità molto più alta di essere vicino al centro rispetto ai bordi.