界限处理不对
对于区间[b, a]
初始
f(a) > 0
f(b) < 0
对于c=(a+b)/2
如果f(c)>0 则继续操作[b,c]
否则操作[c,a]
这个是二分法的核心
所以代码应该是
# include
# include
int main ()
{
double a,b,c,d;
a=10;
b=-10;
c=(a+b)/2;
d=2*c*c*c-4*c*c+3*c-6;
while(fabs(d)>1e-8)
{
if(d<0)
{
b=c;
c=(a+b)/2;
d=2*c*c*c-4*c*c+3*c-6;
}
else
{
a=c;
c=(a+b)/2;
d=2*c*c*c-4*c*c+3*c-6;
}
}
printf("The answer is %lf",c);
return 0;
}