Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- #include <cmath>
- #include <omp.h>
- int N=0;
- using namespace std;
- int circle( int chunk) { // ôóíêöèÿ, êîòîðàÿ ñ÷èòàåò äëÿ êàæäãî áëîêà êîë-âî òî÷åê â êðóãå
- int n = chunk;
- srand( time (NULL));
- double x,r;
- double y;
- int Nt=0;
- for( int i = 0; i < n; i++ ){ // öèêë äëÿ ïîäñ÷åòà â äàííîì áëîêå êîë-âà ïîïàâøèõ òî÷åê
- x = (double)rand()*2/RAND_MAX - 1; // ãåíåðàöèÿ êîîðäèíàò
- y = (double)rand()*2/RAND_MAX - 1;
- r = sqrt (x*x+y*y);
- if(r < 1) Nt++; // ïðîâåðêà óñëîâèÿ
- }
- return Nt;
- }
- int main(){
- long int Tsamples=1e6; // îáùåå êîë-âî ýêñï. òî÷åê
- int omp_get_num_threads(void);
- int num_of_Threads; // çàäàåì êîë-âî ïîòîêîâ
- int chunk; // êîë-âî áëîêîâ
- int i=0;
- #pragma omp parallel
- num_of_Threads= omp_get_num_threads();
- chunk = Tsamples/num_of_Threads;
- #pragma omp for schedule(static,chunk) private (i) reduction(+:N)
- for ( i=0; i < num_of_Threads; i++ ) { // öèêë äëÿ âûçîâà ôóíêöèè äëÿ êàæîãî áëîêà è ñóììèðîâàíèÿ ðåçóëüòàòîâ
- N+= circle( chunk );
- }
- double pi;
- pi = 4 * N / Tsamples; // âû÷èñëÿåì ÷èñëî Ïè ïî ôîðìóëå Ìîíòå-Êàðëî
- cout<<"N= "<< N<< "pi = " << pi;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement