// adaptado de Barton,Nackman "Scientific and Engineering C++"
//      jtmn, Ago, 2003

#include <iostream>
#include <cmath>
using namespace std;
// originalmente static double f(double x){ } 
// mas nao precisa do static aqui
double f(double x) { return x*x-2; }
double fprime(double x) { return 2*x; }
int main() {
double x, dx;
const double initial_guess = 10;
const double desired_accuracy = 1e-15;

x = initial_guess;

cout.precision(20);
cout.width(20); 

do {

    dx = f(x) / fprime(x);
    x  -= dx;
    cout << "x = " << x << endl;

} while (abs(dx) > desired_accuracy);

 cout << "final x = "<< x << endl;
return 0;
}

