积分法
计算公式

串行代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <iomanip>
#include <time.h>
using namespace std;
int main()
{
struct timeval time1, time2;
double ans = 0, N;
cout << "输入n:" << endl;
cin >> N;
gettimeofday(&time1, NULL);
for(double i = 0; i < N; i ++)
ans += (4/(1 + ((i + 0.5)/N)*((i + 0.5)/N)))/N;
cout << setprecision(20) << ans << endl;
gettimeofday(&time2, NULL);
printf("s: %ld, ms: %ld\n", time2.tv_sec-time1.tv_sec, (time2.tv_sec*1000 + time2.tv_sec/1000)-(time1.tv_sec*1000 + time1.tv_sec/1000));
}
并行代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <unistd.h>
#include <iomanip>
#include <time.h>
#include <pthread.h>
using namespace std;
long long n;
int thread_count;
double sum = 0.0;
pthread_mutex_t mutex;
void* Thread_sum(void* rank)
{
int my_rank = *(int *) rank;
double my_sum = 0.0;
long long i;
long long my_n = n/thread_count;
long long my_first_i = my_n * my_rank;
long long my_last_i = my_first_i + my_n;
for(i = my_first_i; i < my_last_i; i ++)
my_sum += 4 / (1 + ((i + 0.5) / n )*((i + 0.5) / n )) / n;
pthread_mutex_lock(&mutex);
sum += my_sum;
pthread_mutex_unlock