//法一:while
/*版权声明:本文为CSDN博主「Micheal超」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42887760/article/details/84067150*/*/
*#include<stdio.h>
#include<math.h>
double f(double x);
const double eps = 1e-6; //定义我们计算的精度
int main()
{
double x0,x1=0,x2=0,fx0;//[x1,x2]为寻找区间,x0为中点,浮点型数据
scanf("%lf %lf",&x1, &x2);
if(f(x1)*f(x2)<0)
{
while(fabs(x2-x1)>eps)
{
x0=(x1+x2)/2.0;//取x1,x2的中点
fx0=f(x0);
if(fabs(fx0)<eps)//满足精确度
break;
else if(f(x0)*f(x1)<0)
{
x2=x0; //修正区间,将[x1,x2]换成[x1,x0],这里的x0是中点
}
else if(f(x0)*f(x2)<0)
{
x1=x0;//修正区间,将[x1,x2]换成[x0,x2],这里的x0是中点
}
}
}
else{
//可以放入其他求方程的根的方法
}
x0=(x1+x2)/2;
printf("%lf\n",x0);
return 0;
}
double f(double x) //定义函数(方程)
{
return 2*x*x*x-4*x*x+3*x-6;
}
*/
/*————————————————
版权声明:本文为CSDN博主「Micheal超」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42887760/article/details/84067150*/
//法二:(原创)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x);
int main ()
{ double a,b,c;
double f1,f2,f0;
scanf("%lf %lf",&a,&b);
for(;;)
{ c=(a+b)/2;
f1=f(a);f2=f(b);f0=f(c);
if(fabs(f0)<1e-6) break;
else if(f0*f1<0) b=c;
else if(f0*f2<0) a=c;
}
printf("%.6lf\n",c);
}
double f(double x)
{
return 2*x*x*x-4*x*x+3*x-6;
}
//感谢CSDN博主「Micheal超」对这一编程问题的解答。