C++:编一个求一元二次方程的程序,不知道错哪了

#include<iostream.h>
double f(double j,double k,double l,double x);
main()
{
double a,b,c,d,m,n,s,z,f;
cout<<"解一元二次方程ax^2+bx+c=0,请输入a,b,c:"<<endl;
cin>>a>>b>>c;
m=(-2*a)/b;
d=10000;
z=(4*a*c-b*b)/4*a;
if(a>0&&z<0)
{
s=f(a,b,c,d);
do
d=d/2;
while(s>0);
}
else if(a<0&&z>0)
{
s=f(a,b,c,d);
do
d=d/2;
while(s<0);
}
cout<<"在区间"<<d<<到<<2*d<<"内"<<endl;
return 0;
}
double f(double j,double k,double l,double x)
{
double y;
y=j*x*x+k*x+l;
return y;
}
我把程序改进了一下,可以运行了,但是算不出正确的答案,求高人指点......

#include<iostream.h>
double f(double j,double k,double l,double x)
{
return j*x*x+k*x+l;
}
main()
{
double a,b,c,d,m,n,s,z;
cout<<"解一元二次方程ax^2+bx+c=0,请输入a,b,c:"<<endl;
cin>>a>>b>>c;
m=(-2*a)/b;
d=10000;
z=(4*a*c-b*b)/4*a;
if(a>0&&z<0)
{
s=f(a,b,c,d);
do
d=d/2;
while(s>0);
}
else if(a<0&&z>0)
{
s=f(a,b,c,d);
do
d=d/2;
while(s<0);
}
cout<<"在区间"<<d<<"到"<<2*d<<"内"<<endl;
return 0;
}

应该是精度不够。 遵循IEEE标准的8字节(64位)的double能表示的有效数字的位数是15 ~ 16,你这个1+pow(10, 20)表示不了。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜