浮点数溢出怎么解决?
我运行程序之后,就这样了
但是结果是对的,就是后面老是出现-1.#IND和-1.#INF,这怎么解决?
#include<iostream> //包含iostream的头文件
#include<math.h>
#include<string>//字符串处理函数
using namespace std;
class FindRoot//定义类FindRoot
{
private:
float a,b,c;
double r,q,x1,x2,R;//定义数据成员类型
int jud;
public:
void Input();//输入函数
void Display();//显示函数
void Find();//求根函数
};
//以上是类的声明部分,以下是类的实现部分
void FindRoot::Input()
{
cout<<"这是一个求解ax^2+bx+c=0的根的程序:"<<endl;//总述程序
cout<<"请输入a,b,c的值:"<<endl;
cin>>a;
cin>>b;
cin>>c;
if(a==0.0&&b!=0.0)
{
cout<<"x1=x2="<<-c/b<<endl;
}
else
if(a==0.0&&b==0.0&&c==0.0)
{
cout<<"x1=x2=R"<<endl;
}
else
if(a==0.0&&b==0.0&&c!=0.0)
{
cout<<"输入错误"<<endl;
}
else;
}
void FindRoot::Find()//定义求根的函数
{
float delta=b*b-4*a*c;//定义求根公式的数据类型
if(delta<0)
{jud=0;
r=-b/(2*a);
q=sqrt(-delta)/(2*a);//有两个共轭复数根的情况
}
else if(delta==0)
{
x1=-b/(2*a);
jud=1;//有两个相同的根的情况
}
else
{
x1=(-b+sqrt
(delta))/(2*a);
x2=(-b-sqrt
(delta))/(2*a);
jud=2;//有两个不同的根的情况
}
}
void FindRoot::Display()//定义显示函数
{
switch(jud)
{
case 0:
{cout<<"x1="<<r<<"+"<<q<<"i"<<endl;
cout<<"x2="<<r<<"-"<<q<<"i"<<endl;}break;//显示有共轭复数根时的解
case 1:
cout<<"x1=x2="<<x1<<endl;break;//显示有一实根时的解
case 2:
cout<<"x1="<<x1<<'\n'<<"x2="<<x2<<endl;break;//显示有两不同根情况的解
}
}
void main()//主函数
{
while(1)
{
FindRoot f;//定义类型
f.Input();
f.Find();
f.Display();//以上各函数按顺序执行
cout<<"是否退出?(Y退出,其它任意键继续)"<<endl;//程序是否退出
char m[2];char Y[]="Y";char y[]="y";//定义字符串
cin>>m;
if(strcmp(m,Y)==0||strcmp(m,y)==0)
break;//如果退出则终止运行
else
cout<<"请继续……"<<endl;//如果不退出则继续执行
}
}