Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Losowanie liczb rzeczywistych

Ostatnio zmodyfikowano 2013-12-05 14:22
Autor Wiadomość
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:
C/C++
a = rand() % 11;
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
P-98377
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.
P-98381
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
C/C++
#include <iostream>
#include <ctime>
#include <random>

int main()
{
    std::mt19937 rnd( std::time( NULL ) );
    std::uniform_real_distribution < double > dist( 0, 10 ); //tu podajesz przedział
    std::cout << dist( rnd ) << std::endl;
}
W niektórych kompilatorach konieczne jest włączenie trybu C++11.
P-98385
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)
P-98396
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.
P-98403
« 1 »
  Strona 1 z 1