Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. #include <omp.h>
  2. #include <iostream>
  3. #include <time.h>
  4. #include <math.h>
  5.  
  6. #define CORES 8
  7.  
  8. using namespace std;
  9.  
  10.  
  11. double fun(double x) {
  12. return 1 / (1 + x * x);
  13. }
  14.  
  15. double MonteCarlo(long long n){
  16. int inside = 0;
  17. double x = 0, y = 0;
  18. for(int i = 0; i < n; i++){
  19. x=double(rand())/double(RAND_MAX);
  20. y=double(rand())/double(RAND_MAX);
  21. if(x*x + y*y <= 1){
  22. inside++;
  23. }
  24. }
  25. return 4.0 * inside / n;
  26. }
  27.  
  28. int main(int argc, char *argv[]) {
  29.  
  30. //Zadanie 4 z równoległym ok 8 sec
  31. double sum = 0;
  32. double result[8];
  33. long long int n = 100000000;
  34. #pragma omp parallel
  35. {
  36. int k = omp_get_thread_num();
  37.  
  38. srand(int(time(NULL)) ^ k);
  39. int inside = 0;
  40. double x = 0, y = 0;
  41.  
  42. for (long i = k; i < n; i += CORES) {
  43. x = double(rand()) / double(RAND_MAX);
  44. y = double(rand()) / double(RAND_MAX);
  45. if (x * x + y * y <= 1) {
  46. inside++;
  47. }
  48. }
  49. result[k] = inside;
  50. }
  51.  
  52. for (int i = 0; i < CORES; i++) {
  53. sum += result[i];
  54. }
  55. cout << "Result= " << (sum / n) * 4;
  56.  
  57.  
  58. //Zadanie 4 bez równoległego ok 40sec
  59. //cout<<MonteCarlo(100000000);
  60.  
  61.  
  62. // trzecia wersja ok 7 sec
  63. //
  64. // double suma = 0;
  65. //
  66. // double a = 0, b = 1;
  67. // double dx = 0.000000001;
  68. //
  69. // long n = (b - a) / dx;
  70. // double x = 0, w = 0;
  71. //
  72. //#pragma omp parallel for reduction(+:suma)
  73. // for(long i = 0; i < n; i++) {
  74. // x = a + i * dx;
  75. // suma += fun(x) * dx;
  76. // }
  77. //
  78. //
  79. // cout<<"Resutl= "<<suma*4;
  80.  
  81.  
  82. //druga wersja ok 2s
  83. // double result[8];
  84. //#pragma omp parallel
  85. // {
  86. // int k, threads;
  87. // k = omp_get_thread_num();
  88. // threads = omp_get_num_threads();
  89. //
  90. // double a = 0, b = 1;
  91. // double dx = 0.000000001;
  92. //
  93. // double n = (b - a) / dx;
  94. // double x = 0, w = 0;
  95. //
  96. // for (long i = k; i < n; i += CORES) {
  97. // x = a + i * dx;
  98. // w += fun(x) * dx;
  99. // }
  100. //
  101. // result[k] = w;
  102. //
  103. // }
  104. //
  105. //
  106. // double sum = 0.0;
  107. //
  108. // for (int i = 0; i < CORES; i++) {
  109. // sum += result[i];
  110. // }
  111. // cout << "Result= " << sum * 4;
  112.  
  113.  
  114. //Pierwsza wersja ok 17 sec
  115. //
  116. // double a = 0, b = 1;
  117. // double dx = 0.000000001;
  118. //
  119. // long n = (b - a) / dx;
  120. // double x = 0, w = 0;
  121. //
  122. // for(long i = 0; i < n; i++) {
  123. // x = a + i * dx;
  124. // w += fun(x) * dx;
  125. // }
  126. //
  127. // cout<<"Result: "<<w*4;
  128.  
  129. return 0;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement