我在寻找真实正方形的正确道路上吗?

时间:2019-06-02 15:22:49

标签: c++ formula quadratic

我正在自己编写第一个代码。到目前为止,所有内容都已复制粘贴,并对示例进行了一些更改。 我认为我正在朝正确的方向前进,但不确定。

#include <iostream>
#include <cmath>
using namespace std;
int main ( )

{
    int a, b, c, x1, x2;

        cout << "Please enter an integer value for a " << endl;
            cin >> a;
        cout << "Please enter an integer value for b " << endl;
            cin >> b;
        cout << "Please enter an integer value for b " << endl;
            cin >> c;

        cout << "           The Quadratic Formula is: \n";
        cout << "           X = (-b +- sqrt ((b * b) - 4 * a * c)) \ (2 * a)\n";
        cout << " \n";

        x1 = sqrt((b * b)- 4 * a *c);
        x2 = -sqrt((b * b) - 4 * a * c);

        if (x1 < 0) 
        {
            //use 1, 2, 3 
            cout << "There are no real roots 1";
            cout << x1;
        }

            else if (x1 == 0)
            {
                //use 4, 12, 9
                cout << "There is one real root ";
                cout << x1;
            }

                else 
                {
                    //use 2, 11, 5
                    cout << "There are two real roots ";
                    cout << x1 << ", " << x2;
                }

    return 0;
}

如果在询问时输入三个数字,它应该计算它是否没有实数平方,一个实数平方或两个实数平方,并告诉您结果。似乎可以做到这一点,但是我不确定我是否掌握了数学知识。我确实找到了一些数字,这些数字可以分别得出预期的结果。我不确定我是否记下了正确的数学,还是可以更轻松地完成? 谢谢你。

1 个答案:

答案 0 :(得分:0)

您只需要查看二次函数的判别式即可查看其根的类型。判别式是二次方程平方根下的部分:

quadratic equation

如果判别为负,则根为虚数。如果为正,则存在两个不同的真实根。并且如果它为零,则仅存在一个大小为-b/(2*a)的根。

因此您可以执行以下操作:

float tol = 1e-6;
float discriminant = b*b -4*a*c;
if ((discriminant < 0.0 + tol) && (discriminant > 0.0 - tol)) {
  std::cout << "one real root.\n";
} else if (discriminant < 0.0) {
  std::cout << "imaginary roots.\n";
} else {
  std::cout << "real roots.\n";
}

此外,我不会在数学表达式中使用整数,它们不允许小数,因此您会得到意想不到的结果。

图片来自Wikipedia