#include #include #include #include double seriesLeibnitz(long start, long endN) { double a = 0.; for (int i = start + 1; i <= endN; i++) a += (double)(pow(-1, i) / (1 + 2.0 * i)); return a; } double seriesTaylor(long start, long endN) { double a = 0.; for (int i = start + 1; i <= endN; i++) a += (double)(pow(-1, i) / (i + 2.0)); return a; } struct Data{ long start; long endN; }; static void *func(void *lpParam) { struct Data dt = *((struct Data *)lpParam); double* result = (double*) malloc(sizeof(double)); *result = seriesTaylor(dt.start, dt.endN); return result; } int main (int argc, char *argv[]) { const int N = 4; long iterations = 10000000; pthread_t *th = new pthread_t[N]; Data *dat = new Data[N]; for (int i = 0; i < N; i++){ dat[i].start = iterations / N * i; dat[i].endN = iterations / N * i + iterations / N; pthread_create(&th[i], NULL, func, &dat[i]); } double dbl; void *t; double S = 1; for (int i = 0; i < N; i++){ pthread_join(th[i], (void**)&t); dbl = *(double*) t; S +=dbl; } S *= 4; std::cout << "Result: " << S << std::endl; free(th); }