2011-09-05 11 views

Odpowiedz

11

jednolity:
Generowanie losowej liczby w zakresie [0,1] z uniform distribution:

double X=((double)rand()/(double)RAND_MAX); 

Exponentional
wytwarzające exponentional random variable z parametrem lambda

-ln(U)/lambda (where U~Uniform[0,1]). 

normalny:
Najprostszym sposobem [choć czasochłonnym] jest użycie central limit theorem, [suma liczby równomiernie rozproszonych], ale są inne metody w wikipedia page, takie jak box muller transform, która generuje 2 niezależne zmienne losowe: X, Y ~ N (0, 1)

X=sqrt(-2ln(U))*cos(2*pi*V) 
Y=sqrt(-2ln(U))*sin(2*pi*V) 
where U,V~UNIFORM[0,1] 

przekształcania z X ~ N (0,1) do z ~ N (m, s^​​2) jest prosta Z = s*X + m

że można wygenerować te liczby losowe, stoję @ Amigable Clark Kant sugeruje użycie istniejącej biblioteki.

+0

Jeśli platforma obsługuje C++ 11, dostępny jest nowy, potężny numer losowy. Obsługuje już 20 wspólnych dystrybucji. Zobacz [C++ 11 FAQ] (http://www.stroustrup.com/C++11FAQ.html#std-random). – ManuelAtWork

Powiązane problemy