C++中的複數
C++中的複數操作在C語言基礎上引進了面向對象的特性,在 C++
頭文件在 complex
中定義了一個 complex
類用來表示複數。同時爲了兼容 C
的 complex
類型,也提供了一個 complex.h
的頭文件。 不同的是,在 complex.h
頭文件中, complex
關鍵字被廢棄,只能使用 _Complex
和 __complex__
來使用 C風格的複數形式。
- 複數的定義
在C++中可以使用兩種方式定義一個複數,一個使用C風格 _Complex
和 __complex__
,一個是使用 complex
類。
#include <iostream>
#include <complex>
#include <complex.h>
using namespace std;
int main(int argc, char *argv[])
{
o complex<double> mycomplex(2.000,2);
_Complex double mycomplex2 = 2.000 + 3I;
__complex__ double mycomplex3 = 2.000 + 4I;
cout << mycomplex << endl;
cout << "(" << creal(mycomplex2) << "," << cimag(mycomplex2) << ")" << endl;
cout << "(" << creal(mycomplex3) << "," << cimag(mycomplex3) << ")" << endl;
return 0;
}
- 複數的基本操作函數
在C++中既可以使用 C
風格的相關函數處理 C
風格的複數形式。
函數 | 功能 |
---|---|
creal | 獲取複數的實部 |
cimag | 獲取複數的虛部 |
conj | 獲取複數的共軛 |
carg | 獲取,複平面上穿過原點和複數在複平面表示的點,的直線和實數軸之間的夾角 |
cproj | 返回複數在黎曼球面上的投影 |
也可以使用 C++相關數值操作方法,處理 complex
形式的複數。
方法 | 功能 |
---|---|
real | 獲取複數的實部 |
imag | 獲取複數的虛部 |
abs | 獲取複數的絕對值 |
arg | 獲取,複平面上穿過原點和複數在複平面表示的點,的直線和實數軸之間的夾角 |
norm | 獲取複數的範數 |
conj | 獲取複數的共軛 |
polar | 獲取極座標對應的複數 |
proj | 返回複數在黎曼球面上的投影 |
#include <iostream>
#include <complex.h>
using namespace std;
int main(int argc, char *argv[])
{
complex<double> mycomplex(2.000,2);
_Complex double mycomplex2 = 2.000 + 3I;
double real_mycomplex = mycomplex.real();
double imag_mycomplex = mycomplex.imag();
double abs_mycomplex = abs(mycomplex);
double norm_mycomplex = norm(mycomplex);
double real_mycomplex2 = creal(mycomplex2);
double imag_mycomplex2 = cimag(mycomplex2);
double abs_mycomplex2 = cabs(mycomplex2);
cout << "real part of mycomplex: " << real_mycomplex << endl;
cout << "image part of mycomplex: " << imag_mycomplex << endl;
cout << "abs of mycomplex: " << abs_mycomplex << endl;
cout << "norm of mycomplex: " << norm_mycomplex << endl;
cout << "real part of mycomplex2: " << real_mycomplex2 << endl;
cout << "image part of mycomplex2: " << imag_mycomplex2 << endl;
cout << "abs of mycomplex2: " << abs_mycomplex2 << endl;
return 0;
}
real part of mycomplex: 2
image part of mycomplex: 2
abs of mycomplex: 2.82843
norm of mycomplex: 8
real part of mycomplex2: 2
image part of mycomplex2: 3
abs of mycomplex2: 3.60555
- 複數的數值操作
#include <iostream>
#include <complex.h>
#include <complex>
using namespace std;
int main(int argc, char *argv[])
{
complex<double> mycomplex(2.000,2);
complex<double> mycomplex3(3.000,4);
_Complex double mycomplex2 = 2.000 + 3I;
_Complex double mycomplex4 = 2.000 + 5I;
_Complex double plus = mycomplex2 + mycomplex4;
complex<double> plus2 = mycomplex+mycomplex3;
cout << "(" << creal(plus) << "," << cimag(plus) << ")" << endl;
cout << plus2 << endl;
return 0;
}
(4,8)
(5,6)