2017-10-06 47 views
-2

我已经编写了这个代码来解决一个二次公式,但当答案很复杂时(如3i或√3的iota形式)它不起作用我想得到的答案中丝毫我怎么能管理它我怎样才能设法从我的代码中获得复数的答案

#include<iostream> 
#include<math.h> 

using namespace std; 

int main(){ 
    float a,b,c,variable1,variable2,variable3,y,x,variable4; 
    cout<<"Enter a:"; 
    cin>>a; 
    cout<<"Enter b:"; 
    cin>>b; 
    cout<<"Enter c:"; 
    cin>>c; 
    variable1=-b; 
    variable2=b*b; 
    variable3=(4*a*c); 
    variable4=(variable2-variable3); 
    y=sqrtf(variable4); 
    x=(variable1+y)/2; 
    cout<<"x=" <<x <<endl; 
} 
+5

第1步:正确缩进代码。 – Borgleader

+0

Borgleader如何? –

+0

@UsmanQamar步骤1:将光标放在不正确缩进的行之前。第2步:按空格键。 – glennsl

回答

4

std::sqrt产生复杂的结果<complex>声明,并采取了std::complex<T>作为它的参数,因此要获得一个复杂的结果,过载,你需要启动一个复杂的输入,并包含正确的标题。

这里有一个简单的例子:

#include <complex> 
#include <iostream> 

int main() { 
    std::complex<double> d{ -1, 0 }; 

    std::cout << std::sqrt(d); 
} 

结果:

(0,1) 

这些分别代表实部和虚部,所以这是0+1i,正如我们所期待。

这也可能是值得注意的是,开始用C++ 14,标准库定义一个用户定义的文字为虚数,因此你可以初始化d这样的:

using namespace std::literals; 

auto d = -1.0 + 0i; 

这产生相同的结果,但对于习惯于编写复杂数字为a + bi的人来说,它可能看起来更加熟悉/舒适。一个“诀窍”是它仍然在进行类型扣除,所以要获得complex<double>,您需要使用-1.0而不是-1(我想试图推导出std::complex<int>)。