liczba pi metodą monte carlo

0
 #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:

          x = ((double)rand() / (RAND_MAX))*2 - 1;
         y = ((double)rand() / (RAND_MAX))*2 - 1; 
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

0

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

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

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)

0

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

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)

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]

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.

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