/* 
 * arquivo: slog.c
 * ---------------
 * Dado numero real x, este programa calcula log(1 - x) 
 * atraves da soma dos termos da serie
 *
 * - x - x^2/2 - x^3/3 - ...
 *
 * Esta serie funciona para todo x com |x| < 1.
 * A soma 'e feita ate que a soma de um termo nao faca mais
 * diferenca.  Isto 'e, ate somar novos termos fique
 * "indiferente".
 *
 * Cuidado: este programa pode nao parar se voce fornecer
 * um x que 'e proximo de 1.  Voce pode modificar este programa
 * para que ele pare (incondicionalmente) apos somar um
 * certo numero de termos (exercicio simples).
 */

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

int main()
{
  int i;
  double x, s = 0.0, tmp, pot_x=1;

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

  for (i = 1;; i++) { /* laco infinito */
    pot_x *= x;
    tmp = s - pot_x/i;
    if (s == tmp)
      break;
    s = tmp;
  }

  printf("log(1 - %g) = log(%g) = %.20g [nossa serie]\n",
	 x, 1-x, s);
  printf("log(1 - %g) = log(%g) = %.20g [biblioteca math]\n",
	 x, 1-x, log(1 - x));
  return 0;
}
