我有一个问题,主要函数是switch语句的case 8
,它应该使用Quadratic公式求解方程。
case 8: {
float h, numero;
float s = 0.00001, x = s;
float c, q;
cout<<"Introduce los valores: " <<endl;
cout<<"a = "; cin>>a; cout<<endl;
cout<<"b = "; cin>>b; cout<<endl;
cout<<"c = "; cin>>c; cout<<endl;
for(int e=0; e < 15; e++){
cout<<".";
Sleep(60);
}
cout<<"x = (-b +/- sqrtb^2 - 4ac)/2a "<<endl;
q = (b*b - 4*a*c);
if (q > 0){
for (h=1; h <= q; h++){
while (x*x < h){
x += s;
}
}
cout<<"Las raices de tu ecuacion de segundo grado son: " <<endl <<(-b + q)/2*a <<endl <<" y " <<endl <<(-b - q)/2*a;
}
else {
cout<<"tus raices son imaginarias :( "<<endl;
}
}break;
答案 0 :(得分:0)
我不确定您的确切问题是什么,如果您添加一些说明,我会对此进行编辑,但这里有一些信息和观察结果可以帮助您。
平方根函数通常实现为 迭代函数 ,这意味着它从某个基本猜测开始,然后不断改进每个循环的猜测。当其近似值达到某个容差范围内的误差时,它将退出并返回其近似值。
您的代码正在尝试执行此操作,但您的迭代中存在严重错误。结果是,与C ++数学库的标准平方根实现相比,您的答案非常不准确。
if (q > 0){
for (h=1; h <= q; h++){
while (x*x < h){
x += s;
}
}
}
你有一个while循环包含在一个for循环中,它添加一个然后迭代直到h大于q。问题是q可以代表2.56
之类的内容,而h只代表值1.0
,2.0
,3.0
等。这会增加一些额外的和不必要的错误,因为h实际上不能代表q的真值,因此循环必须使用近似2.0
代替2.56
来生成。
如果将其更改为:
,您可以获得非常接近C ++的sqrt函数的准确度if (q > 0){
while (x*x < q){
x += s;
}
}
请注意,我已移除for循环并将while (x*x < h)
更改为while (x*x < q)
。
我希望这会有所帮助。如果这不是您想要的,请发布更多详细信息!