double a,b,c,d;
double fun(double x)
{
return a*x*x*x+b*x*x+c*x+d;
};
int main()
{
double l,r,mid,llim,rlim;
int i,res=0;
cin>>a>>b>>c>>d;
for(i=-100;i<101;i++)
{
l=i;
r=i+1;
llim=fun(l);
rlim=fun(r);
if(llim==0)
{
printf("%0.2lf ",l);
res++;
}
if(llim*rlim<0)
{
while(r-l>1e-5)
{
mid=(l+r)/2;
if(fun(mid)>0.0) r=mid;
else l=mid;
}
printf("%.2lf ",l);
res++;
}
if(res==3) return 0;
}
return 0;
}
样例1 -4.65 2.25 1.4
当我写成if(fun(mid)>0.0) r=mid;时,我的第二个答案是0.00.但这不是关键,关键是我进行调试当l=0时,r是等于1的,但是rlim竟然不等于0,而是-4.4几,这是为什么?
/*if(fun(mid)fun(r)>0.0) r=mid;改成这个就ac了,但是这不是关键,关键是对样例r=1时,rlim竟然不等于0!/