# include # include # include # include int main ( int argc, char *argv[] ) { double e; double h; int i; int my_id; double my_q; int n; int p_num; double q; double x; MPI_Init ( &argc, &argv ); MPI_Comm_rank ( MPI_COMM_WORLD, &my_id ); MPI_Comm_size ( MPI_COMM_WORLD, &p_num ); n = atoi ( argv[1] ); h = 1.0 / ( double ) n / ( double ) ( p_num ); x = ( double ) ( my_id ) / ( double ) ( p_num ); my_q = 0.0; for ( i = 0; i < n; i++ ) { my_q = my_q + h * 1.0 / ( x + 1.0 ); x = x + h; } printf ( " P:%d MY_Q=%14.6g\n", my_id, my_q ); MPI_Reduce ( &my_q, &q, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD ); if ( my_id == 0 ) { e = fabs ( q - log ( 2.0 ) ); printf ( " N=%6d Q=%14.6g E=%10.2e\n", n, q, e ); } MPI_Finalize ( ); return 0; }