int is_in_mandelbrot(double complex z);
int is_in_julia(double complex c, double complex z);
int main(int argc, char **argv){
int rank, size, m=0, i, small_in=0, big_in;
double* a;
double* b;
//double t[2];
double complex c;
c = 2.0+1.0*I;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if(rank == 0){
FILE *myFile;
myFile = fopen("/home/laurence/Desktop/cs/3INF/kolokwium/dane.txt", "r");
//fscanf(myFile, "%1d %lf %lf", &m, &t[0], &t[1]);
fscanf(myFile, "%d", &m);
for(i=1;i<size;i++){
MPI_Send(&m,1,MPI_INT,i,0,MPI_COMM_WORLD);
}
//for(i=1;i<size;i++){
// MPI_Send(&t[0],2,MPI_DOUBLE,i,0,MPI_COMM_WORLD);
//}
fclose(myFile);
}
else{
MPI_Recv(&m,1,MPI_INT,0,0,MPI_COMM_WORLD, NULL);
//MPI_Recv(&t[0],2,MPI_DOUBLE,0,0,MPI_COMM_WORLD,NULL);
}
//printf("t:%lf %lf\n",t[0],t[1]);
//printf("%d moje m %d\n",rank,m);
//c = t[0]+t[1]*I;
a = (double *)malloc(m*sizeof(double));
b = (double *)malloc(m*sizeof(double));
if(rank == 0){
FILE *myFile;
double t1,t2;
int i=0;
myFile = fopen("/home/laurence/Desktop/cs/3INF/kolokwium/dane.txt", "r");
//fscanf(myFile, "%d %lf %lf", &m, &t1, &t2);
fscanf(myFile, "%d", &m);
while (fscanf(myFile, "%lf %lf", &t1, &t2)){
a[i] = t1;
b[i] = t2;
//printf("%lf %lf\n\n",a[i],b[i]);
if(++i == m) break;
}
fclose(myFile);
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Bcast(&a[0],m,MPI_DOUBLE,0,MPI_COMM_WORLD);
MPI_Bcast(&b[0],m,MPI_DOUBLE,0,MPI_COMM_WORLD);
double complex c_nums[m];
for(i=0;i<m;i++){
c_nums[i] = a[i]+b[i]*I;
}
for(i=rank;i<m;i+=size){
//printf("%d : %d : %.2lf\n",rank, is_in_mandelbrot(c_nums[i]), cabs(c_nums[i]));
if(cabs(c_nums[i]) < 2 && is_in_mandelbrot(c_nums[i]))
small_in++;
}
MPI_Reduce(&small_in,&big_in,1,MPI_INT,MPI_SUM, 0, MPI_COMM_WORLD);
if(rank == 0){
printf("Punktow w zbiorze jest %d/%d\n",big_in,m);
}
MPI_Finalize();
return 0;
}
int is_in_mandelbrot(double complex z) {
int N = 10000;
unsigned int i = 0;
double complex zi = 0.0 + 0.0 * I;
while (creal(zi)*creal(zi)+cimag(zi)*cimag(zi) < 4 && i++ < N) {
zi = zi*zi + z;
}
if (i < N)
return 0;
else
return 1;
}
int is_in_julia(double complex c, double complex z) {
int N = 10000;
unsigned int i = 0;
double complex zi = c;
while (creal(zi)*creal(zi)+cimag(zi)*cimag(zi) < 4 && i++ < N) {
zi = zi*zi + z;
}
if (i < N)
return 0;
else
return 1;
}
SPACER