梵洛何 2015-11-28 07:06 采纳率: 18.2%
浏览 1592

一元二次方程求解,解决溢出,要求精确度

乘法可能会溢出,所以要解决溢出,要求输出结果相对误差1e-12,这是我的代码,不知道哪里出了问题,结果总是不对。还是学生一枚,求大神指教

 #include<iostream>
#include<iomanip>
#include<cmath>
#include<float.h>
using namespace std;
int main()
{
    double a,b,c,con1=1e-12,con2=1e12,pan,x1,x2,temp;
    cin>>a>>b>>c;

    if(c==0)
    {
        if(b==0)
        {
            x1=0;
            x2=0;
        }
        else
        {
            x1=0;
            x2=-b/a;
        }
        cout<<x1<<endl;
        cout<<x2<<endl;
        return 0;
    }
    if(b==0)
    {
        if((a*c)>0)
        {
            x1=0;
            x2=0;
        }
        else
        {
            x1=sqrt(-c/a);
            x2=-x1;
        }
        cout<<setiosflags(ios::scientific)<<setprecision(16)<<x1<<endl;
        cout<<setiosflags(ios::scientific)<<setprecision(16)<<x2<<endl;
        return 0;
    }
    while(fabs(b)>DBL_MAX/fabs(b)||fabs(4*a)>DBL_MAX/fabs(c))
    {
        a=a*con1;
    b=b*con1;
    c=c*con1;
    }
    while(fabs(b)<DBL_MIN/fabs(b)||fabs(4*a)<DBL_MIN/fabs(c))
    {
        a=a*con2;
    b=b*con2;
    c=c*con2;
    }
    pan=b*b-4*a*c;
    if(pan<-(1e-12))//判别式小于0
    {
        cout<<0<<endl;
        cout<<0<<endl;
        return 0;
    }
    if(pan>=-(1e-12)&&pan<=(1e-12))//判别式等于0
    {
        x1=-b/(2*a);
        x2=-b/(2*a);
        cout<<setprecision(16)<<x1<<endl;
        cout<<setprecision(16)<<x2<<endl;
    }
    else{//判别式大于0

    temp=sqrt(b*b-4*a*c);
    if(b>0)
        {
    x1=(-b-temp)/(2*a);
    x2=(-b+temp)/(2*a);
        }
        else
        {
            x1=(2*c)/(-b-temp);
            x2=(2*c)/(-b+temp);
    }
        cout<<setprecision(16)<<x1<<endl;
        cout<<setprecision(16)<<x2<<endl;
    }

    return 0;
}


  • 写回答

4条回答 默认 最新

  • ysuwood 2015-11-28 07:20
    关注

    说说结果怎么不对了?

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab求解平差
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法