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

updated intro_lab

parent 6643b934
Branches
No related tags found
No related merge requests found
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
*/ */
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
unsigned long nsteps = 1<<27; /* around 10^8 steps */ unsigned long nsteps = 100000000;
double dx = 1.0 / nsteps; double dx = 1.0 / nsteps;
double pi = 0.0; double pi = 0.0;
...@@ -25,7 +25,7 @@ int main(int argc, char** argv) ...@@ -25,7 +25,7 @@ int main(int argc, char** argv)
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("\npi 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;
......
! This program will numerically compute the integral of ! This program computes pi as
! ! \pi = 4 arctan(1)
! 4/(1+x*x) ! = 4 \int _0 ^1 \frac{1} {1 + x^2} dx
!
! from 0 to 1. The value of this integral is pi -- which program compute_pi
! is great since it gives us an easy way to check the answer.
!
! The is the original sequential program. It uses the timer
! from the OpenMP runtime library
!
! History: Written by Tim Mattson, 11/99.
program calc_pi
use omp_lib use omp_lib
implicit none implicit none
integer(kind=8) :: num_steps = 100000000 integer(kind=8) :: nsteps, i
real(kind=8) step real(kind=8) :: dx, x, pi, ref_pi
integer i
real(kind=8) x, pi, raw_sum
real(kind=8) start_time, run_time real(kind=8) start_time, run_time
step = 1.0D0 / num_steps nsteps = 100000000
dx = 1.0D0 / nsteps
pi = 0.0D0
start_time = OMP_GET_WTIME() start_time = OMP_GET_WTIME()
raw_sum = 0.0D0 do i = 1, nsteps
x = (i - 0.5D0) * dx
do i = 1, num_steps pi = pi + 1.0D0 / (1.0D0 + x * x)
x = (i-0.5D0)*step
raw_sum = raw_sum + 4.0D0/(1.0D0+x*x)
enddo enddo
pi = step * raw_sum pi = pi * 4.0D0 * dx
run_time = OMP_GET_WTIME() - start_time run_time = OMP_GET_WTIME() - start_time
print '(" pi with ", i0, " steps is ", f12.6, " in ", f12.6, " seconds")', num_steps, pi, run_time 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)
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