liczba pi metodą monte carlo

liczba pi metodą monte carlo
0
Kopiuj
 #include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main()
{
     srand(time(NULL)); //zainicjalizowanie maszyny generujacej liczby losowe
     int n;
     int nk = 0;
     double x,y;
     float s;
 
     cout << "Podaj liczbe losowanych pkt:" << endl;
     cin >> n;
 
     for(int i = 1; i <= n; i++)
     {           
         x = ((double)rand() / (RAND_MAX))*2 - 1;
         y = ((double)rand() / (RAND_MAX))*2 - 1;
         if(x*x + y*y <= 1)
         {
             nk++;
         }
     }
 
     cout << "Liczba pkt. w kole wynosi: " << nk << endl;
     cout << "Liczba pkt. w kwadracie wynosi: " << n << endl;
     s = 4. * nk / n;
     cout << "Liczba pi wynosi: " << s;
} 

Powyższy program jest z wikipedi. Czy ktoś mógłby mi wytłumaczyć co robi ta część programu:

Kopiuj
          x = ((double)rand() / (RAND_MAX))*2 - 1;
         y = ((double)rand() / (RAND_MAX))*2 - 1; 
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0

Losuje punkt o współrzędnych x,y z zakresu (-1,1] - czyli już jest błąd (-1,1) - jest dobrze, coś mi się ubzdurało że rand() generuje z zakresu: 0<=rand()<RAND_MAX


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon
0

czyli jak powinno być? program skopiowałem z wikipedi

jak powinno być żeby zakres losowań był od 0 do 1

CV
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 lata
  • Postów:19
0

a=zakres_dolny+frand()*(zakres_gorny-zakres_dolny+1);
To jest wzór na wyliczenie od 0 do 1.
użyjcie w programie frand() wylosuje Ci liczbę [0, 1)

edytowany 1x, ostatnio: CoVerS
0

jednak program musi losować z przedziału [-1,1] bo inaczej zawszy punkty leżały by w kole.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1
amator0000 napisał(a):

jednak program musi losować z przedziału [-1,1] bo inaczej zawszy punkty leżały by w kole.
Absolutnie nie musi, wystarczy [0,1)


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

jeżeli na kole o promieniu r=1 i środku w punkcje [0,0] opiszemy kwadrat to współrzędne wierzchołków teko kwadratu będą w punktach [-1,-1];[-1,1];[1,1];[1,-1] to losujemy przecież z przedziału punkty z przedziału [-1,1]

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

A jeżeli odkroisz od tego kwadratu jedną ćwiartkę czyli losujesz w zakresie [0,1) to co się zmieni?
Proporcja wewnątrz/razem zostanie taka sama.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.