Skip to content
Snippets Groups Projects
Commit 6fb9f35b authored by Xin Li's avatar Xin Li
Browse files

updated pi code

parent 49d2f3bd
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
#include <math.h> #include <math.h>
#include <omp.h> #include <omp.h>
#define NSTEPS 134217728
/* /*
* This program computes pi as * This program computes pi as
* \pi = 4 arctan(1) * \pi = 4 arctan(1)
...@@ -9,24 +11,23 @@ ...@@ -9,24 +11,23 @@
*/ */
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
unsigned long nsteps = 100000000; long i;
double dx = 1.0 / nsteps; double dx = 1.0 / NSTEPS;
double pi = 0.0; double pi = 0.0;
double start_time = omp_get_wtime(); double start_time = omp_get_wtime();
unsigned long i; for (i = 0; i < NSTEPS; i++)
for (i = 0; i < nsteps; i++)
{ {
double x = (i + 0.5) * dx; double x = (i + 0.5) * dx;
pi += 1.0 / (1.0 + x * x); pi += 1.0 / (1.0 + x * x);
} }
pi *= 4.0 * dx;
pi *= 4.0 * dx;
double run_time = omp_get_wtime() - start_time; double run_time = omp_get_wtime() - start_time;
double ref_pi = 4.0 * atan(1.0); double ref_pi = 4.0 * atan(1.0);
printf("pi with %ld steps is %.10f in %.6f seconds (error=%e)\n", printf("pi with %ld steps is %.10f in %.6f seconds (error=%e)\n",
nsteps, pi, run_time, fabs(ref_pi - pi)); NSTEPS, pi, run_time, fabs(ref_pi - pi));
return 0; return 0;
} }
...@@ -8,25 +8,25 @@ use omp_lib ...@@ -8,25 +8,25 @@ use omp_lib
implicit none implicit none
integer(kind=8) :: nsteps, i integer(kind=8), parameter :: NSTEPS = 134217728
integer(kind=8) :: i
real(kind=8) :: dx, x, pi, ref_pi real(kind=8) :: dx, x, pi, ref_pi
real(kind=8) start_time, run_time real(kind=8) start_time, run_time
nsteps = 100000000 dx = 1.0D0 / NSTEPS
dx = 1.0D0 / nsteps
pi = 0.0D0 pi = 0.0D0
start_time = OMP_GET_WTIME() start_time = OMP_GET_WTIME()
do i = 1, nsteps do i = 1, NSTEPS
x = (i - 0.5D0) * dx x = (i - 0.5D0) * dx
pi = pi + 1.0D0 / (1.0D0 + x * x) pi = pi + 1.0D0 / (1.0D0 + x * x)
enddo enddo
pi = pi * 4.0D0 * dx pi = pi * 4.0D0 * dx
run_time = OMP_GET_WTIME() - start_time run_time = OMP_GET_WTIME() - start_time
ref_pi = 4.0D0 * atan(1.0D0) ref_pi = 4.0D0 * atan(1.0D0)
print '("pi with ", i0, " steps is ", f16.10, " in ", f12.6, " seconds (error=", e12.6, ")")', nsteps, pi, run_time, abs(ref_pi - pi) print '("pi with ", i0, " steps is ", f16.10, " in ", f12.6, " seconds (error=", e12.6, ")")', NSTEPS, pi, run_time, abs(ref_pi - pi)
end program end program
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment