program esponenziale ! Il programma approssima il valore di exp(x) tramite ! il polinomio di Taylor p(n,x), con i due algoritmi ! exp(x)~=p(n,x) e exp(x)~=1/p(n,-x) e fa i confronti implicit none real(8) :: x,e1,e2,err1,err2,taylor integer :: k,n=500 do ! Ciclo infinito, esci se x==0 write(*,'(a)',advance='no') "Inserisci il valore di x (0 per uscire) " read (*,*) x if (x==0) exit ! Calcolo un'approssimazione di exp(x) e1=taylor(n,x) err1=abs(exp(x)-e1)/exp(x) ! Calcolo un'approssimazione di 1/exp(-x) e2=1/taylor(n,-x) err2=abs(exp(x)-e2)/exp(x) write(*,*) "Algoritmo 1. exp(x) =",e1,"Errore =",err1 write(*,*) "Algoritmo 2. exp(x) =",e2,"Errore =",err2 end do end program esponenziale function taylor (n,x) implicit none real(8) :: taylor,x integer :: n real(8) :: s,s1,a integer :: k s=0.0d0;a=1.0d0 do k=1,n if (k==n) write(*,*) "Attenzione! ",n," non bastano" s1=s+a if (s1==s) exit a=a*x/k s=s1 end do taylor=s end function taylor