#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double a, b, c, d;
double f(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
cin>>a>>b>>c>>d;
for(double i=-100; i<=100; i++)
{
double l=i, r=i+1, eps=1e-4;
if(fabs(f(l))<eps)
{
printf("%.2lf ", l);
}else{
if(fabs(f(r))<eps)
{
continue;
}else{
if(f(l)*f(r)<eps)
{
while(l+eps<r)
{
double mid=(l+r)/2;
if(f(mid)*f(l)>eps)
{
l=mid;
}else{
r=mid;
}
}
if(fabs(f(l))<eps)
{
printf("%.2lf ", l);
}
}
}
}
}
return 0;
}
用二分写的,WA了,50分
但是之后把二分后
if(fabs(f(l))<eps)
{
printf("%.2lf ", l);
}
改为
printf("%.2lf ", l);
就AC了
我知道我这个代码如果执行了二分,那肯定能找到根,但如果 l 是根,那不应该满足
fabs(f(l))<eps //(代入原方程使方程成立)
吗?为啥有的根不满足?
蒟蒻跪求大佬,谢谢!