W programowaniu nie mamy dostępu do prawdziwie losowych liczb, dlatego używamy generatorów liczb pseudolosowych. Są one powtarzalne, co oznacza, że możemy w identyczny sposób powtórzyć proces losowania. W języku C++ możemy ustawić ziarnoziarnoziarno dla generatora pseudolosowego. Należy jednak pamiętać, że implementacja takiego generatora może być inna w zależności od kompilatora. Co oznacza, że powtórzenie procesu losowania na innym komputerze może dać inne rezultaty. Ziarno w języku C++ możemy ustawić funkcją srand() z biblioteki <cstdlib> w następujący sposób:
Linia 1. unsigned int ziarno znak równości 15 średnik.
Linia 2. srand otwórz nawias okrągły ziarno zamknij nawias okrągły średnik.
Poniżej prezentujemy kod, który trzy razy wywołuje funkcję wyznaczającą liczbę metodą Monte Carlo. Za każdym razem przed rozpoczęciem procesu losowania ustawiane jest jednak inne ziarno.
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 2. kratka include otwórz nawias ostrokątny cstdlib zamknij nawias ostrokątny.
Linia 4. using namespace std średnik.
Linia 6. double wyznaczPi otwórz nawias okrągły int liczbaLosowan zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. int liczbaTrafien znak równości 0 średnik.
Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny liczbaLosowan średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. prawy ukośnik prawy ukośnik losowe liczby z przedziału otwórz nawias ostrokątny minus 1 przecinek 1 zamknij nawias ostrokątny.
Linia 11. double x znak równości 2 asterysk double otwórz nawias okrągły rand otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik RAND podkreślnik MAX minus 1 średnik.
Linia 12. double y znak równości 2 asterysk double otwórz nawias okrągły rand otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły prawy ukośnik RAND podkreślnik MAX minus 1 średnik.
Linia 14. if otwórz nawias okrągły x asterysk x plus y asterysk y otwórz nawias ostrokątny znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 15. plus plus liczbaTrafien średnik.
Linia 16. zamknij nawias klamrowy.
Linia 17. zamknij nawias klamrowy.
Linia 19. double pi znak równości 4 asterysk double otwórz nawias okrągły liczbaTrafien zamknij nawias okrągły prawy ukośnik liczbaLosowan średnik.
Linia 21. return pi średnik.
Linia 22. zamknij nawias klamrowy.
Linia 24. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 25. srand otwórz nawias okrągły 1 zamknij nawias okrągły średnik.
Linia 26. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wyznaczPi otwórz nawias okrągły 10000 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 27. srand otwórz nawias okrągły 2 zamknij nawias okrągły średnik.
Linia 28. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wyznaczPi otwórz nawias okrągły 10000 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 29. srand otwórz nawias okrągły 3 zamknij nawias okrągły średnik.
Linia 30. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wyznaczPi otwórz nawias okrągły 10000 zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 32. return 0 średnik.
Linia 33. zamknij nawias klamrowy.
Przykładowe wyniki uzyskane po uruchomieniu programu:
Linia 1. 3 kropka 1464.
Linia 2. 3 kropka 1568.
Linia 3. 3 kropka 12.
1
Polecenie 1
Przeanalizuj prezentację, w której porównujemy dwa dostępne w języku C++ generatory liczb pseudolosowych.
R1W5P2QNdKkN61
Polecenie 2
Przeprowadź 100 razy symulację dla losowań. Za każdym razem zainicjuj generator losowym ziarnem według opisanej w prezentacji metody. Oblicz średnią arytmetyczną uzyskanych wyników. Następnie przeprowadź jedną symulację zainicjowaną losowym ziarnem dla
Słownik
ziarno
ziarno
liczba lub wektor służący do zainicjowania generatora pseudolosowego
generator liczb pseudolosowych
generator liczb pseudolosowych
podprogram zwracający kolejne liczby z deterministycznego ciągu liczb, który ma podobne własności do ciągów losowych
Stanisław Ulam
Stanisław Ulam
polski matematyk (ur. kwietnia r. we Lwowie, zm. maja r. w Santa Fe), zaliczany do lwowskiej szkoły matematycznej, posiadający wybitny wkład do teorii mnogości oraz topologii, twórca metod numerycznych, współtwórca bomby atomowej
skala logarytmiczna
skala logarytmiczna
rodzaj skali pomiarowej, w której wartość przekształcana jest za pomocą funkcji logarytmicznej, najczęściej o podstawie 2, 10 lub