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

updated pi code

parent 49d2f3bd
Branches
Tags
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