2017-10-06 52 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>)。