求一元二次方程的根

C++ 专栏收录该内容
46 篇文章 0 订阅

这个题在本地测试没问题,在oj上提交就是通不过。。。

精度问题相信好多人应该可以想到,看老师的公告应该也能想到。但是关于Windows、Linux上面对-0的输出不同,这个貌似很多同学都被坑了好几天(当然也包括我啦)。

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    double a=0.0,b=0.0,c=0.0;
    cin>>a>>b>>c;
	double d1=b*b;
	double d2=4*a*c;
	double x1=0.0,x2=0.0,i1=0.0,i2=0.0;
	double dzero=0.0;
	if(b<1e-7&&b>-1e-7)
	{
		dzero=0.0;
	}
	else
	{
		dzero=-b/(2*a);
	}
	if(d1==d2)
	{
		x1=dzero;
		printf("x1=x2=%.5lf\n",x1);
	}
	else if(d1>d2)
	{
		x1=dzero+sqrt(d1-d2)/(2*a);
		x2=dzero-sqrt(d1-d2)/(2*a);
		printf("x1=%.5lf;x2=%.5lf\n",x1,x2);
	}
	else
	{
		x1=dzero;
		i1=sqrt(d2-d1)/(2*a);
		printf("x1=%.5lf+%.5lfi;x2=%.5lf%.5lfi\n",x1,i1,x1,-i1);
	}

    return 0;
}

 

展开阅读全文
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值