liczby losowe w klasie - mt19937 (C++)

0

Cześć,
Mam następujący problem:
Mam klasę, której obiekty będą liczne. Klasa powinna mieć możliwość losowania liczb. W tym celu stworzyłem sobie dwa obiekty statyczne w tej klasie:

//w pliku .h
static mt19937 eng;
static normal_distribution<double> dist;
//w pliku .cpp
mt19937 klasa::eng(static_cast<unsigned long>(time(nullptr)));
normal_distribution<double> klasa::dist; //(0, 1);

Moje pytanie brzmi - jak ustawić rozkład w pliku .cpp lub w funkcji, jeśli nie chcę go ustawiać przy definicji obiektu (tak by nie było tego konstruktora - który jest w komentarzu)?
Próbowałem np. tak:

klasa::dist.param(0,1); //wyskakuje błąd: "missing ';' before '.'"

Więc się zastanawiam w jaki sposób mogę wywołać tą funkcję? :/
bez klasa:: - również nie działa... grrr

Z góry dziękuję za pomoc.

0

Nie wiem skąd wytrząsnąłeś tą klasa::
Samych przykładów powinno wystarczyć aby zrozumieć:
http://www.cplusplus.com/reference/random/mersenne_twister_engine/mersenne_twister_engine/
http://www.cplusplus.com/reference/random/normal_distribution/

0

Przeglądałem te i inne strony, ale w tych przykładach nie ma jak ustawić nowe wartości dla rozkładu (średnią i odchylenie).
Zapewne jest to banalny problem, ale ja dopiero uczę się programować i często mam problemy z takimi "banałami".
Metodą prób i błędów doszedłem do wniosku, że funkcja param przyjmuje tylko 1 parametr i jest nim średnia. Czyli mogę zrobić tak:

	mt19937 eng(static_cast<unsigned long>(time(nullptr)));
	normal_distribution<double> dist(0, 1);	//średnia 0 i odchylenie 1
	dist.param(3); //zmiana średniej z 0 na 3

Teraz zastanawiam się jak zmienić odchylenie z 1 np. na 2?
Na podanej przez Ciebie stronie jest informacja:
normal_distribution::mean
normal_distribution::stddev
Ale nie mogę dojść do tego jak je wykorzystać :(

Czy mogę prosić o pomoc w rozwiązaniu tego problemu?
Z góry dziękuję!

1
dist.param(normal_distribution<double>(1,10).param());
0
_13th_Dragon napisał(a):
dist.param(normal_distribution<double>(1,10).param());

Dziękuję Ci bardzo! Działa!
Trochę nie rozumiem tego zapisu, ale myślę, że to tylko kwestia czasu ;-)
pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1