#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{ double x1,x0,m,n;
scanf("%lf",&x0);//输入一个根的近似值x0,这里的近似是人工输入,可能与实际有较大偏差
m=2*pow(x0,3)-4*pow(x0,2)+3*x0-6;//m=f(x),这里这一步不能到for里面再写,要保证m有个初值,只有m具有初值才能验证 m!=0的条件
for(;m!=0;)//f(x)!=0就继续循环
{
x0--;//如果想要更加精确这里可以写成x0=x0-1e-6
m=2*pow(x0,3)-4*pow(x0,2)+3*x0-6;//f(x)
n=6*pow(x0,2)-8*x0+3;//f'(x)
x1=x0-m/n;//x1是方程根的近似值
}
if(fabs(x1-x0)<1e-6)//这里验证近似值x1和实际值偏差在10的-6次方以内
printf("%.6lf\n",x1);
return 0;
}
/*这个算法求根只能输入比实际根大的数(近似值) 上面的x0--决定了这个算法的局限性*/