[P1034][NOIP2001]一元三次方程求解 (二分)

二分

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double fc(double x)
{
    return a*pow(x,3)+b*pow(x,2)+c*x+d;
}
int main()
{
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    double l=-100,r=100,ans,x1,x2,mid;
    int s=0;
    for(int i=-100;i<=100;i++){
        l=i;
        r=i+1;
        x1=fc(l);
        x2=fc(r);
        if(!x1){
            printf("%.2lf ",l);
            s++;
        }
        if(x1*x2<0){
            while(r-l>=0.001)
            {
                mid=(l+r)/2;
                if(fc(mid)*fc(r)<=0) l=mid;
                else r=mid;
            }printf("%.2f ",r);
        s++;
        }
        if(s==3) break;
    }
    return 0;
}

 

posted @ 2018-11-08 07:42  lincold  阅读(265)  评论(0编辑  收藏  举报