      program aulacomp
!	programa principal de erros computacionais
      ! implicit real *8 (a-h,o-z)
	parameter (nmax=20)
	dimension term(nmax)
!	common /contador/ icont
      open(unit=1,file='inpaula.txt',status='old') 
	open(unit=2,file='outaula.txt',status='unknown')        


!	primeira parte

	write(*,*)'primeira parte - erros acumulados de arredondamento'
	sum=0.d0
	do i=1,10000
		sum=sum+0.0001d0
	enddo
	write(*,*)'sum =  ',sum,' valor correto de sum = ',1.
	write(2,*)'sum =  ',sum
	  stop
!	segunda parte
!	calcular os termos da serie 1 + 1/3 + 1/9 + 1/27 + ....

	write(*,*)
	write(*,*)'segunda parte - soma de termos de serie numerica'
	term(1) = 1.d0
	do i=2,nmax
		term(i)=term(i-1)/3
	enddo
	sum=0.d0
	do j=1,nmax
		sum=sum+term(j)
	enddo
	write(*,*)'somando da esquerda para a direita acha-se',sum
	write(2,*)'somando da esquerda para a direita acha-se',sum
	sum=0.d0
	do j=nmax,1,-1
		sum=sum+term(j)
	enddo
	write(*,*)'somando da direita para a esquerda acha-se',sum
	write(2,*)'somando da direita para a esquerda acha-se',sum
	 stop
!	terceira parte

	write(*,*)
	write(*,*)'terceira parte - erro na derivada devido tamanho da palavra do computador'
	write(*,*)'    dx  ','   calc. deriv  ','  erro'
	write(2,*)'    dx  ','   calc. deriv  ','  erro'
	x=3.d0
	trued=1./x
	do i=1,nmax
	dx=1.d0/(10.d0**i)
	calcd=(log(x+dx)-log(x))/dx
	erro=trued-calcd
	write(*,*)dx,calcd,erro
	write(2,*)dx,calcd,erro
	enddo
	stop
!	quarta parte

	write(*,*)
	write(*,*)'quarta parte - raiz quadrada'
	read(1,*)a,g
!	calcula a nova estimativa
10	continue
      q=a/g
!	if(q.ne.g) then
	if(abs(q-g).ge.1.d-6*g) then
		g=(g+q)/2
		write(*,*)g,q
		write(*,*)g,q
		write(2,*)g,q
		write(2,*)g,q
		goto 10
	else
		write(*,*)'a raiz quadrada de ',a,' eh ',g
		write(2,*)'a raiz quadrada de ',a,' eh ',g
	endif
	stop



!	Exemplo 1.12 do livro texto

	write(*,*)
	write(*,*)'quinta parte - instabilidade numerica'
	xn_1=1.d0
	xn=0.2d0
	aux=1.d0/5.d0
	n=2
	do i=1,60
		xn1=21.d0*xn/5.d0-4.d0*xn_1/5.d0
		xteo=aux**n
		write(*,*)' x_(',n,')num =  ',xn1,' x_(',n,')exato = ',xteo
		write(2,*)' x_(',n,')num =  ',xn1,' x_(',n,')exato = ',xteo
		xn_1=xn
		xn=xn1
		n=n+1
	enddo
	stop


	end
