二次方程计算器的输出命中或未命中

时间:2019-05-02 14:30:00

标签: c++ visual-studio math

下面的代码应该读取一个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 ++中编写数学公式时,是否有某种礼节?

谢谢。

1 个答案:

答案 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);