如果这个问题非常简单,我很抱歉,但我是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这样的数字时,会导致整个公式无效。
答案 0 :(得分:1)
要使用绝对值,您可以使用<cstdlib>
标题中的abs()
。
然而,正如我所知,如果判别式是否定的,那只是意味着没有解决方案。
因此,如果discrimant是正数,那么只添加一个if
子句来执行该部分公式可能是更好的解决方案。
在更高级的数学中,负数的平方根确实在复平面中有答案。要获得此结果,您可以使用数据类型complex<double>
并使用带有复数的sqrt()
的重载版本。