/* 
 * arquivo: sqrtNewton.c
 * ---------------------
 * Dados a>0 e epsilon>0, determinamos uma aproximacao para a raiz quadrada de
 * a usando o metodo de Newton:
 * 
 * r_0 = a
 * r_n = (1/2)(r_{n-1}+a/r_{n-1}), para todo n>0.
 *
 * A aproximacao 'e r_N, onde N 'e o menor inteiro para o qual temos 
 * |r_N-r_{N-1}|<epsilon.
 */

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

#define TRUE 1

int main()
{
  double a, epsilon, r, r_ant;

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

  r_ant = a;
  while (TRUE) {
    r = (r_ant+a/r_ant)/2;
    if ((r-r_ant<epsilon)&&(r_ant-r)<epsilon)
      break;
    r_ant=r;
  }

  printf("sqrt(%g) = %.20g [metodo de Newton]\n", a, r);
  printf("sqrt(%g) = %.20g [biblioteca math]\n", a, sqrt(a));
  
  return 0;
}
