二分法(解方程,UVA 10341)

来源:互联网 发布:人工智能顶级会议 编辑:程序博客网 时间:2024/05/16 02:30

观察后发现函数在[0,1]是单调减函数,如果f(0)>=0且f(1)<=0那么就有唯一解,可以用二分法找到它,否则就无解。


关于精度丢失以及浮点比较的个人见解

http://blog.csdn.net/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;}


0 0