Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. # include <stdlib.h>
  2. # include <stdio.h>
  3. # include <math.h>
  4.  
  5. # include "mpi.h"
  6.  
  7. #define RANGE 4000
  8.  
  9. double calc(int id, int d, int limit);
  10.  
  11. int main ( int argc, char *argv[] )
  12. {
  13. int tag = 1;
  14. int id; // rank
  15. int p; // size
  16.  
  17. MPI_Status status;
  18. MPI_Init ( &argc, &argv );
  19.  
  20. MPI_Comm_rank ( MPI_COMM_WORLD, &id );
  21.  
  22. MPI_Comm_size ( MPI_COMM_WORLD, &p );
  23.  
  24. for(int range = RANGE ;range<=40000000; range*=10){
  25. int d = range/p;
  26. double sum = 0;
  27. sum =calc(id,d,range);
  28. if(id!=0)
  29. MPI_Send ( &sum, 1, MPI_DOUBLE, 0, tag, MPI_COMM_WORLD );
  30.  
  31. if(id==0)
  32. {
  33. printf("Dokładność: %d\n",range);
  34. double item = 0;
  35. for(int i = 1; i<p;i++){
  36. MPI_Recv ( &item, 1, MPI_DOUBLE, i, tag, MPI_COMM_WORLD, &status );
  37. sum+=item;
  38. }
  39. sum*=4;
  40. printf("PI: %lf, MATH-PI: %lf, ERROR: %lf\n",sum,M_PI,M_PI-sum);
  41. }
  42. }
  43.  
  44. MPI_Finalize ( );
  45. return 0;
  46. }
  47.  
  48. double calc(int id, int d, int limit){
  49. double sum = 0;
  50. for(int i = id*d ; i < (id+1)*d; i+=2){
  51. // printf("%d - %d\n",i*2+1, i*2+3);
  52. sum+=(1./(double)(i*2+1) - 1./(double)(i*2+3));
  53. }
  54. return sum;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement