program trapezoidal implicit none integer,parameter::n=20 double precision,parameter::x1=-1.0d0 double precision,parameter::x2=1.0d0 double precision f,x,dx,s1 double precision exact,epsilon integer i f(x)=sqrt(1.d0-x**2) dx=(x2-x1)/dble(n) s1=f(x1)+f(x2) do i=1,n-1 x=dble(i)*dx-1.0d0 s1=s1+2.0d0*f(x) end do s1=s1*dx/2.0d0 exact=atan(1.0d0)*2.0d0 epsilon=abs(s1-exact) write(*,100) s1,epsilon,epsilon/exact 100 format(1x,'s1= ',1pe14.7,' err= ',1pe14.7,' relerr= ', 1pe14.7) stop end