#include <stdlib.h>
#include <stdio.h>
#include <upc_relaxed.h>

shared double sum = 0;

main(int argc, char **argv)
{
	double width, lsum; int intervals, i;
	upc_lock_t *l = upc_all_lock_alloc();

	intervals = atoi(argv[1]);
	width = 1.0 / intervals;
	lsum = 0;
	upc_forall (i=0; i<intervals; ++i; i) {
		double x = (i + 0.5) * width;
		lsum += 4.0 / (1.0 + x * x);
	}
	lsum *= width;
	upc_lock(l);
	sum += lsum;
	upc_unlock(l);
	upc_barrier;
	if (MYTHREAD == 0) {
		printf("Pi is approximately %14.12f\n", sum);
	}
	return(0);
}
