2017.4.23 一元三次方程求解 思考记录

来源:互联网 发布:淘宝上的杂牌手机 编辑:程序博客网 时间:2024/06/05 19:53

        实在太菜了、、竟然不知道浮点数有误差、、、

          另外:修改的时候一次要改全!!!


码:

#include<iostream>#include<cstdio>using namespace std;#include<cmath>double a,ans[6],b,c,d,j,i;int qushi,cnt;int main(){scanf("%lf%lf%lf%lf",&a,&b,&c,&d);for(i=-100;i<=100;i++){//cout<<i<<" "<<i*(i*(a*i+b)+c)+d<<"pp";if(i==-100){if(i*(i*(a*i+b)+c)+d>0)qushi=1;//printf("%.5lf",fabs(i*(i*(a*i+b)+c)+d));if(fabs(i*(i*(a*i+b)+c)+d)<=0.0001){ans[++cnt]=i;}if(i*(i*(a*i+b)+c)+d<0)qushi=0;           continue;}if(fabs(i*(i*(a*i+b)+c)+d)<=0.001){ans[++cnt]=i;continue;}if((i*(i*(a*i+b)+c)+d>0&&qushi==0)||(i*(i*(a*i+b)+c)+d<0&&qushi==1)){  qushi^=1;j=double(i-1)+0.001;    while(j<i)    {   if(fabs(j*(j*(a*j+b)+c)+d)<=0.001)        {        ans[++cnt]=j;break;}        if(((j*(j*(a*j+b)+c)+d)>0&&((j+0.001)*((a*j+0.001)*((j+0.001)+b)+c)+d)<0)||((j*(j*(a*j+b)+c)+d)<0&&((j+0.001)*((a*j+0.001)*((j+0.001)+b)+c)+d)>0))    {                       ans[++cnt]=j;break;    }    j+=0.001;}} } printf("%.2lf %.2lf %.2lf",ans[1],ans[2],ans[3]); } 


0 0