Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <omp.h>
  6. int N=0;
  7. using namespace std;
  8.  
  9. int circle( int chunk) { // ôóíêöèÿ, êîòîðàÿ ñ÷èòàåò äëÿ êàæäãî áëîêà êîë-âî òî÷åê â êðóãå
  10. int n = chunk;
  11. srand( time (NULL));
  12. double x,r;
  13. double y;
  14. int Nt=0;
  15. for( int i = 0; i < n; i++ ){ // öèêë äëÿ ïîäñ÷åòà â äàííîì áëîêå êîë-âà ïîïàâøèõ òî÷åê
  16. x = (double)rand()*2/RAND_MAX - 1; // ãåíåðàöèÿ êîîðäèíàò
  17. y = (double)rand()*2/RAND_MAX - 1;
  18. r = sqrt (x*x+y*y);
  19. if(r < 1) Nt++; // ïðîâåðêà óñëîâèÿ
  20. }
  21. return Nt;
  22. }
  23.  
  24. int main(){
  25. long int Tsamples=1e6; // îáùåå êîë-âî ýêñï. òî÷åê
  26. int omp_get_num_threads(void);
  27. int num_of_Threads; // çàäàåì êîë-âî ïîòîêîâ
  28. int chunk; // êîë-âî áëîêîâ
  29. int i=0;
  30. #pragma omp parallel
  31. num_of_Threads= omp_get_num_threads();
  32. chunk = Tsamples/num_of_Threads;
  33.  
  34. #pragma omp for schedule(static,chunk) private (i) reduction(+:N)
  35. for ( i=0; i < num_of_Threads; i++ ) { // öèêë äëÿ âûçîâà ôóíêöèè äëÿ êàæîãî áëîêà è ñóììèðîâàíèÿ ðåçóëüòàòîâ
  36. N+= circle( chunk );
  37. }
  38. double pi;
  39. pi = 4 * N / Tsamples; // âû÷èñëÿåì ÷èñëî Ïè ïî ôîðìóëå Ìîíòå-Êàðëî
  40. cout<<"N= "<< N<< "pi = " << pi;
  41. return 0;
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement