C++ 如何得到c+中负根二次方程的结果+;?

C++ 如何得到c+中负根二次方程的结果+;?,c++,math,C++,Math,我试图得到一个负根的二次方程的结果,但是当我在纸上做这个运算时,我得到的结果是不一样的,而且结果也不一样,当它是相反的时候,它是完美的 #include<iostream> #include<cmath> using namespace std; int main() { int a, b, c; double x1, x2; cout << "Quadratic Formula" << endl;

我试图得到一个负根的二次方程的结果,但是当我在纸上做这个运算时,我得到的结果是不一样的,而且结果也不一样,当它是相反的时候,它是完美的

#include<iostream>
#include<cmath>

using namespace std;

int main()
{
    int a, b, c;

    double x1, x2;
    cout << "Quadratic Formula" << endl;
    cout << "    -b + sqrt(b ^ 2) - 4ac" << endl;
    cout << "x = -----------------------" << endl;
    cout << "              2a" << endl;
    cout << "" << endl;
    
    cout << "a Value: " << endl;
    cin >> a;
    cout << "b Value: " << endl;
    cin >> b;
    cout << "c Value: " << endl;    
    cin >> c;

    double sqRoot, det;

    det = b * b - 4 * a * c;

    if(det < 0)
    {
    
       sqRoot = sqrt(det * -1); //minus per minus = plus so it's possible to calculate the sqrt of
                                //the negative number
       x1 = (-b + sqRoot)/ 2 * a; 
       x2 = (-b - sqRoot)/ 2 * a;
    
       cout << "value of x1: " << x1 << " i"<< endl;
    
       cout << "Value of x2: " << x2 << " i"<< endl;        
   }
   else
   {
       sqRoot = sqrt(det);
    
       x1 = (-b + sqRoot)/ 2 * a; 
       x2 = (-b - sqRoot)/ 2 * a;
    
       cout << "Value of x1: " << x1 << endl;
    
       cout << "Value of x2: " << x2 << endl;
   }

}
#包括
#包括
使用名称空间std;
int main()
{
INTA、b、c;
双x1,x2;

您的第一个问题是操作优先级

以下几行中应该有一个括号:

x1=(-b+sqRoot)/(2*a);
x2=(-b-平方根)/(2*a);
而不是

x1=(-b+sqRoot)/2*a;
x2=(-b-平方根)/2*a;
第二个问题是使用
int
变量进行除法

代码应如下所示:

#包括
#包括
#包括
使用名称空间std;
int main()
{
INTA、b、c;
双x1,x2;

您的第一个问题是操作优先级

以下几行中应该有一个括号:

x1=(-b+sqRoot)/(2*a);
x2=(-b-平方根)/(2*a);
而不是

x1=(-b+sqRoot)/2*a;
x2=(-b-平方根)/2*a;
第二个问题是使用
int
变量进行除法

代码应如下所示:

#包括
#包括
#包括
使用名称空间std;
int main()
{
INTA、b、c;
双x1,x2;

cout您可以使用
std::complex

#include<iostream>
#include<cmath>
#include<complex>

using namespace std;

int main()
{
    double a = 1.0;
    double b = 4.0;
    double c = 5.0;

    double det = b * b - 4.0 * a * c;
    
    auto sqRoot = sqrt(std::complex<double>(det));
    auto x1 = (-b + sqRoot) / (2.0 * a); 
    auto x2 = (-b - sqRoot) / (2.0 * a);

    cout << "value of x1: " << x1 << endl; // (-2,1)
    cout << "value of x2: " << x2 << endl; // (-2,-1)    
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
双a=1.0;
双b=4.0;
双c=5.0;
双det=b*b-4.0*a*c;
auto sqRoot=sqrt(std::complex(det));
自动x1=(-b+平方根)/(2.0*a);
自动x2=(-b-平方根)/(2.0*a);

cout您可以使用
std::complex

#include<iostream>
#include<cmath>
#include<complex>

using namespace std;

int main()
{
    double a = 1.0;
    double b = 4.0;
    double c = 5.0;

    double det = b * b - 4.0 * a * c;
    
    auto sqRoot = sqrt(std::complex<double>(det));
    auto x1 = (-b + sqRoot) / (2.0 * a); 
    auto x2 = (-b - sqRoot) / (2.0 * a);

    cout << "value of x1: " << x1 << endl; // (-2,1)
    cout << "value of x2: " << x2 << endl; // (-2,-1)    
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
双a=1.0;
双b=4.0;
双c=5.0;
双det=b*b-4.0*a*c;
auto sqRoot=sqrt(std::complex(det));
自动x1=(-b+平方根)/(2.0*a);
自动x2=(-b-平方根)/(2.0*a);

如果你得到了<代码> -nA/Cord>,那是因为C++中没有负数的平方根。Type:<代码> /2*<代码> > >代码> /(2×A)< /> > YAAP,操作符优先。也可能需要用复数操作(如STD::复合体)。或者分别保留虚部。当根为复数时,实部为
-b/(2*a)
,虚部为
sqRoot/(2*a)你不能把真实的和虚构的部分添加到一个完全虚构的数字中。如果你得到了<代码> -nA/COD>,那就是因为C++中没有负数的平方根。Type:<代码> /2 * A < /C> > >代码> /(2×A)< /> > YAAP,操作符优先。也可能需要用复数操作(如STD::复合体)。或者分别保留虚部。当根为复数时,实部为
-b/(2*a)
,虚部为
sqRoot/(2*a)
。您不能将实部和虚部添加到一个完全虚数中。这显然是一个很好的解决方案,但它对我不起作用,因为数据类型
auto
引发了以下错误:
variableName不是一个类型
,我通过使用
auto
将所有变量声明为
std::complex/c来解决这个问题ode>。如果您的编译器不知道
auto
,那么它一定很旧了……是的,我用另一个编译器尝试了它,它可以工作,我应该更新我使用的编译器。这显然是一个很好的解决方案,但它对我不起作用,因为数据类型
auto
抛出了以下错误:
variableName不是一个类型
,我通过声明所有变量解决了这个问题使用
auto
std::complex
的bles。如果您的编译器不知道
auto
,那么它一定很旧。是的,我用另一个编译器尝试了它,它可以工作,我应该更新我使用的编译器。