观察后发现函数在[0,1]是单调减函数,如果f(0)>=0且f(1)<=0那么就有唯一解,可以用二分法找到它,否则就无解。
关于精度丢失以及浮点比较的个人见解
http://blog.youkuaiyun.com/xl2015190026/article/details/53509019
代码
#include<bits/stdc++.h>
using namespace std;
const double e=2.718281828;
const double eps=1e-8;
int p,q,r,s,t,u;
double cul(double x)
{
return p*pow(e,-x)+q*sin(x)+r*cos(x)+s*tan(x)+t*x*x+u;
}
int main()
{
while(scanf("%d %d %d %d %d %d",&p,&q,&r,&s,&t,&u)==6)
{
if(cul(0)>-eps&&cul(1)<eps)
{
double l=0;
double r=1;
while(r-l>eps)
{
double m=(l+r)/2;
if(cul(m)>-eps) l=m;
else r=m;
}
printf("%.4lf\n",l);
}
else puts("No solution");
}
return 0;
}