/* 
 * arquivo: exp2epsilon.c
 * ----------------------
 * Dado x e epsilon (reais) e n, um inteiro, este programa calcula
 * exp(x) atraves da soma dos termos da serie 
 *
 * 1 + x + x^2/2! + x^3/3! + ...
 *
 * ate o valor absoluto do termo se tornar <= epsilon.
 * O programa para quando encontra um tal termo.
 */

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

int main()
{
  int i;
  double x, epsilon, soma = 1.0, termo = 1.0;

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

  printf("Forneca o valor de epsilon: ");
  scanf("%lf", &epsilon);
 
  i = 1;
  while (termo > epsilon || termo < -epsilon) { /*  |termo| > epsilon  */
    termo *= x / i;
    soma += termo;
    i++;
  }

  printf("exp(%g) = %.20g [usando a serie]\n", x, soma);
  printf("exp(%g) = %.20g [biblioteca math]\n", x, exp(x));

  return 0;
}

/* OBS: No lugar de 
 * 
 *  while (termo > epsilon || termo < -epsilon)
 * 
 *  poderiamos usar a funcao fabs (floating abolute value): 
 * 
 *  while (fabs(termo) > epsilon)
 */ 
