标题:浮点数溢出怎么解决?
只看楼主
你好ewvew
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-1-7
结帖率:50%
 问题点数:0 回复次数:2 
浮点数溢出怎么解决?
我运行程序之后,就这样了



但是结果是对的,就是后面老是出现-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;//如果不退出则继续执行
    }
}
搜索更多相关主题的帖子: private 运行程序 include public double 
2016-01-11 21:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
主要是你函数功能混乱造成的,修改如如下:
程序代码:
#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;
        jud=-1;
        if(a==0.0&&b!=0.0)  
        {
            jud=3;
            x1=x2=-c/b;
        }

 else
    
        if(a==0.0&&b==0.0&&c==0.0)  
        {
            jud=4;
        }

 else
        
        if(a==0.0&&b==0.0&&c!=0.0)
        {
            jud=5;
        }
}

void FindRoot::Find()//定义求根的函数
{

 float delta=b*b-4*a*c;//定义求根公式的数据类型
 if (jud>0) return;

 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;//显示有两不同根情况的解
        case 3: cout<<"x1=x2="<<-c/b<<endl;break;
        case 4:cout<<"x1=x2=R"<<endl;break;
        case 5:cout<<"输入错误"<<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;//如果不退出则继续执行
    }
}

能编个毛线衣吗?
2016-01-12 11:45
小王00001
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-1-8
得分:0 
回复 2楼 wmf2014
程序很好,谢谢大神
2016-01-12 13:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-461026-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083970 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved