Losowanie liczb rzeczywistych
Ostatnio zmodyfikowano 2013-12-05 14:22
marek252 Temat założony przez niniejszego użytkownika |
Losowanie liczb rzeczywistych » 2013-12-05 00:20:55 Witam. Jeśli chcę do wylosować jakąś liczbę całkowitą z przedziału od 0 do 10 to mogę zrobić to tak: Wtedy wylosuje jakąś liczbę całkowitą. Jak natomiast wylosować liczbę rzeczywistą z tego przedziału? Chciałby wylosować np. 3,45 albo 5,66. Pozdrawiam |
|
rykukuku |
» 2013-12-05 01:08:45 Możesz np. losować 2 liczby i dzielić je przez siebie. Oczywiście trzeba zrobić wypadek dla dzielenia przez 0. Oczywiście wynik %11. |
|
Monika90 |
» 2013-12-05 01:29:29 Możesz np. losować 2 liczby i dzielić je przez siebie. |
A jaki to będzie miało rozkład? Najlepiej użyć biblioteki standardowej #include <iostream> #include <ctime> #include <random>
int main() { std::mt19937 rnd( std::time( NULL ) ); std::uniform_real_distribution < double > dist( 0, 10 ); std::cout << dist( rnd ) << std::endl; }
W niektórych kompilatorach konieczne jest włączenie trybu C++11. |
|
Wiesiek |
» 2013-12-05 12:38:30 Prosto moż1na to zrobić prymitywnie rand()*10.0/RAND_MAX. Daje RAND_MAX możliwych wyników i rozkład będzie miało na tyle jednostajny, na ile ma go samo rand(). Aby uzyskać większe liczby trzeba posługiwać się losowaniem większej ilości liczb, ale na zasadzie losowania cyfr w układzie liczbowym stałopozycyjnym, np. względem systemu dziesiętnego (rand()%10)*10+rand() daje dobry rozkład liczb od 0 do 99. Podstawą może być także RAND_MAX zamiast 10 (ale nie powinno np 2*RAND_MAX/3) |
|
Monika90 |
» 2013-12-05 14:22:46 Nawet jeżeli rand() ma jednostajny rozkład, to rand() % n ma taki tylko wtedy kiedy RAND_MAX + 1 jest podzielne przez n. |
|
« 1 » |