復數:
復數比較詳細的內容請參考:復數代數
C支持復數的數學計算,復數Z可以在笛卡爾坐標表示為:Z=x+y*I;其中x和y是實數,I是虛數單位。數x被稱為實部,數y為虛部。在c語言中,一個復數是有浮點類型表示的實部和虛部。兩部分都具有相同的類型,無論是float,double或者long double。
float _complex:實虛都為float
double _complex:實虛都為double
long double _complex:實虛都為long double
如果在c 源文件中包含了頭文件 complex.h ,complex.h定義了complex 和 I宏。宏定義complex和一個關鍵字_complex 同義。我們可以用complex代替_complex.
下面是個簡單的例子,運行在debian 7 (32bit)
詳細代碼:
復制代碼
1 /*
2 * Title : Complex Numbers
3 * Description: Work with complex numbers in c
4 * Author:Eric.Lee
5 *
6 */
7 #include<stdio.h>
8 #include<complex.h>
9
10 #define Get_Array_Length(tempArray)(sizeof(tempArray)/sizeof(tempArray[0]))
11
12 void GetResult(char operate,double complex x,double complex y)
13 {
14 double complex result = 0+0*I;
15 switch(operate)
16 {
17 case '+':
18 result = x+y;
19 break;
20 case '-':
21 result = x-y;
22 break;
23 case '*':
24 result = x*y;
25 break;
26 case '/':
27 result =x/y;
28 break;
29 default:
30 break;
31 }
32 printf("double complex x %c double complex y=%.2f+%.2fi\n",operate,creal(result),cimag(result));
33
34 }
35
36 int main()
37 {
38 double complex x = 10.0+15.0*I;
39 double complex y = 20.0-5.0*I;
40
41 printf("working with complex number:\n");
42 printf("Starting values:x=%.2f+%.2fi\ty=%.2f +%.2fi\n",creal(x),cimag(x),creal(y),cimag(y));
43 char operates[] = {'+','-','*','/'};
44 char * op = operates;
45 int i = 0;
46 int operateLength = Get_Array_Length(operates);
47 for(i=0;i<=operateLength-1;i++)
48 {
49 GetResult(*(op++),x,y);
50 }
51
52 return 0;
53 }
復制代碼
creal(x):得到復數的實部(對於 double),如果對於float,使用crealf(x),如果對於long double ,請使用 creall(x)
cimag(x):得到復數的虛部(對於double),如果對於float,使用crealf(x),如果對於long double ,請使用 creall(x)
此外還有一點值得注意的是:
cos(), exp() 和 sqrt()同樣也會有對應得復數方法,例如:ccos(),cexp(),csqrt()