! Approssima la funzione esponenziale mediante le formule
! Exp(x)=1+x+x**2/2!+x**3/3!+...
! Exp(x)=1/(Exp(-x))=1/(1-x+x**2/2!-x**3/3!+...)

PROGRAM esponenziale
  IMPLICIT NONE
  REAL :: X, EX1, EX2, TAYLOR
  INTEGER :: N
  
  WRITE(*,*)" assegna il valore di x"
  READ(*,*) X
  N=1000  ! massimo numero di addendi della serie
  
  ! APPROSSIMO EXP(X) CON TAYLOR
  EX1=TAYLOR(X,N)
  
  ! APPROSSIMO EXP(X) CON 1/EXP(-X) SEMPRE USANDO TAYLOR
  EX2=1/TAYLOR(-X,N)
  
  WRITE(*,*) "EX1=", EX1
  WRITE(*,*) "EX2=", EX2
END PROGRAM ESPONENZIALE

FUNCTION TAYLOR(X, N)
  IMPLICIT NONE
  REAL :: X, TAYLOR
  INTEGER :: N
  
  REAL :: S, S1, A
  INTEGER :: I
  
  S=0.0
  A=1.0
  DO I=1,N
     S1=S+A
     A=A*X/I
     IF(S1==S) EXIT
     S=S1
     IF(I==N) WRITE(*,*)"ATTENZIONE HAI RAGGIUNTO IL MASSIMO NUMERO DI ITERAZIONI"
  END DO
  TAYLOR=S
END FUNCTION TAYLOR






