openMP入门,新手渣渣求解释下面的求圆周率的代码

#include
static long num_steps = 100000;
double step;
#define NUM_THREADS 2
void main () {

int i;

double x, pi, sum[NUM_THREADS];
step = 1.0/(double) num_steps;
omp_set_num_threads(NUM_THREADS)
#pragma omp parallel {

double x;

int id;
id = omp_get_thread_num();
for (i=id, sum[id]=0.0;i< num_steps; i=i+NUM_THREADS) {
x = (i+0.5)*step;
sum[id] += 4.0/(1.0+x*x);
}
}
for(i=0, pi=0.0;i<NUM_THREADS;i++) pi += sum[i] * step;
}

首先,static long num_steps的作用
其次, step = 1.0/(double) num_steps; ?
然后, x = (i+0.5)*step;
最后,谢谢解答

http://blog.csdn.net/xx_123_1_rj/article/details/39179407