In ogni caso:
il C ti mette a disposizione un PRNG a distribuzione piatta tramite la funzione rand (e srand per inizializzarlo ad inizio programma); volendo puoi anche implementarti da te il tuo LCG, è estremamente semplice.
La prima cosa da fare in genere è normalizzare la distribuzione, in modo da limitare i valori ottenuti al range [0, 1]; puoi fare questo con la rand dividendo il risultato per RAND_MAX:
val quindi è una random variabile compresa tra 0 e 1 a distribuzione piatta (uniforme).codice:double val=rand()/((double)RAND_MAX);
A questo punto, devi adattare la tua distribuzione piatta alla distribuzione che ti interessa; per la gaussiana, puoi usare la trasformazione di Box-Muller, per distribuzioni generiche puoi usare il metodo dell'inversione (semplice ed efficiente, ma non applicabile se la CDF non è invertibile in maniera semplice), o il metodo dell'accept-reject (che funziona sempre, ma è piuttosto inefficiente per distribuzioni sensibilmente piccate e/o con "code grasse"). In ogni caso, per la distribuzione triangolare puoi usare facilmente il metodo dell'inversione.

Rispondi quotando