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
,那么它一定很旧。是的,我用另一个编译器尝试了它,它可以工作,我应该更新我使用的编译器。