1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
|
#include <omp.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
int main() {
#pragma omp parallel
srand(time(NULL));
double l = 0.9;
double n = 1000000;
double d = 1;
double angle;
double pi;
double p = 0;
double distanceToLine;
double y;
#pragma omp parallel for
for(int i=0; i < n; i++) {
#pragma omp critical
angle = (double)rand()/(RAND_MAX)*3.1415;
distanceToLine = (double)rand()/(RAND_MAX) * d/2;
y = (l/2) * sin(angle);
if(distanceToLine <= y)
p++;
}
#pragma omp barrier
printf("%lf Nadeln kreuzen eine Linie\n", p);
pi = (2*n*l) / (p * d);
printf("geschätztes Pi ist: %lf\n", pi);
return 0;
}
|