下面的代码应该读取一个2度方程的3个系数,并输出与该在线计算器相似的判别式和解(如果有):https://calculator.tutorvista.com/math/496/2nd-degree-equation-calculator.html 但是由于某种原因,我的计算器似乎可以在其他情况下正确地获得一些结果,但是在大多数情况下不是。
#include <iostream>
#include <math.h>
using namespace std;
int main() {
float a, b, c;
cout << "a=" << endl;
cin >> a;
cout << "b=" << endl;
cin >> b;
cout << "c=" << endl;
cin >> c;
float delta = (pow(b, 2)) - (4 * a*c);
float summit = (-b) / (2 * a);
float x1 = (-(b) + (sqrt(delta)) / (2 * a));
float x2 = (-(b) - (sqrt(delta)) / (2 *a));
cout <<"Discriminant="<< delta << endl;
if (delta < 0) {
cout << "No solution" << endl;
}
else if (delta == 0) {
cout << "Unique solution is:" << summit << endl;
}
else {
cout << "First solution is:" << x1 << endl;
cout << "Second solution is:" << x2 << endl;
}
std::cin.ignore();
std::cin.get();
}
根据上面链接的在线计算器,这里有一些罕见的输入示例,它们可以使我的计算器正常工作:
a = 3; b = 1; c = 24;
a = 1; b = 0; c = 0;
a = 1; b = -4; c = 4;
但是事情并不总是那么顺利,例如输入1; 4; -12会给您8和0,而不是6和-2(请注意结果如何与2相减),在其他情况下,其中之一解决方案将是正确的,而其他解决方案则不会,而且大多数情况下结果是完全没有结果的。
我不确定问题是来自于判别还是解决方案,因为有时前者是正确的而后者不是。
在我不知道的C ++中编写数学公式时,是否有某种礼节?
谢谢。
答案 0 :(得分:4)
公式为(-b +-sqrt(D))/ 2a,
但是你计算 -b +-sqrt(D)/ 2a,
因为除法优先于加法/减法,所以您的行
float x1 = (-(b) + (sqrt(delta)) / (2 * a) );
float x2 = (-(b) - (sqrt(delta)) / (2 * a) );
应该是
float x1 = (-(b) + sqrt(delta)) / (2 * a);
float x2 = (-(b) - sqrt(delta)) / (2 * a);