#include<stdio.h>
#include<math.h>
double yFunc(double x)
{
return x+0.5;
}
double circleFunc(double x)
{
return pow(x, 2.0) + pow(yFunc(x), 2.0) -1.0;
}
double differCircleFunc(double x)
{
return 4.0 * x + 1.0;
}
#define EPS 1e-16
#define MAX_COUNT 100
int count;
double newton(double (*f)(), double (*df)(), double init)
{
count = 0;
double x, old_x;
x = init;
old_x = init+100.0;
for(;fabs(x-old_x)>EPS && count < MAX_COUNT;)
{
count++;
old_x = x;
x = old_x - f(old_x)/df(old_x);
}
return x;
}
int main()
{
double result_x = newton(circleFunc, differCircleFunc, 0.0);
double result_y = yFunc(result_x);
printf("i:%d x:%.16f y:%.16f", count, result_x, result_y);
return 0;
}