/* 
 * arquivo: exp_f.c
 * ----------------
 * Dado numero real x, este programa calcula exp(x) 
 * atraves da soma dos termos da serie
 *
 * 1 + x + x^2/2! + x^3/3! + ...
 *
 * A soma 'e feita ate que a soma de um termo nao faca mais
 * diferenca.  Isto 'e, ate somar novos termos fique
 * "indiferente".
 */

#include <stdio.h>
#include <math.h>

/************************************************************/

/* meu_exp(): estima exp(x) pela soma da serie acima */
double meu_exp(double x);

/************************************************************/

int main()
{
  double x;

  printf("Forneca o valor de x: ");
  scanf("%lf", &x);

  printf("exp(%g) = %.20g [nossa serie]\n", x, meu_exp(x));
  printf("exp(%g) = %.20g [biblioteca math]\n", x, exp(x));
  return 0;
}

/************************************************************/

double meu_exp(double x)
{
  int i;
  double s = 1.0, t = 1.0, tmp;

  for (i = 1;; i++) { 
    t *= x / i;
    tmp = s + t;
    if (s == tmp)
      break;
    s = tmp;
  }

  return s;
}

/************************************************************/
