二次方程:C ++中的负判别式

时间:2015-09-16 22:38:53

标签: c++ math

如果这个问题非常简单,我很抱歉,但我是C ++的新手。我正在设计一个使用二次公式计算2个根的程序。但是,当我的判别式为负数时,我的程序不起作用。

#define _USE_MATH_DEFINES // for C++
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
    int pointa;
    int pointb;
    int pointc;
    int discriminant1;
    float root1;
    float root2;

    cout << "Please enter a, b and c: ";
    cin >> pointa;
    cin >> pointb;
    cin >> pointc;

    discriminant1 = (pow(pointb, 2)) - (4 * pointa * pointc);

    root1 = (-(pointb) + sqrt(discriminant1)) / (2 * pointa);
    root2 = (-(pointb) - sqrt(discriminant1)) / (2 * pointa);

    cout << "Root1 :" << root1 << endl;
    cout << "Root2 :" << root2 << endl;
    return 0;

主要问题是pointb的输入。有没有办法在平方输入时强制pointb成为正数,就像在TI-84中添加括号一样?输入-1这样的数字时,会导致整个公式无效。

1 个答案:

答案 0 :(得分:1)

要使用绝对值,您可以使用<cstdlib>标题中的abs()

然而,正如我所知,如果判别式是否定的,那只是意味着没有解决方案。

因此,如果discrimant是正数,那么只添加一个if子句来执行该部分公式可能是更好的解决方案。

在更高级的数学中,负数的平方根确实在复平面中有答案。要获得此结果,您可以使用数据类型complex<double>并使用带有复数的sqrt()的重载版本。