-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathch1_complex.c
85 lines (69 loc) · 1.42 KB
/
ch1_complex.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
* @Author: Song Dejia
* @Date: 2019-03-03 17:25:10
* @Last Modified by: Song Dejia
* @Last Modified time: 2019-03-03 18:06:03
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
typedef float ItermType;
typedef struct Complex
{
ItermType r;
ItermType v;
}Cpx, *pCpx;
void Assign(pCpx A, ItermType r, ItermType c);
void Add(pCpx A, Cpx B);
void Minus(pCpx A, Cpx B);
void Multiply(pCpx A, Cpx B);
void Divide(pCpx A, Cpx B);
int main()
{
pCpx pCpxA = (pCpx)malloc(sizeof(Cpx));
Cpx CpxB;
// ++++++ Init +++++++++++++++++++
Assign(pCpxA, 10, 1);
Assign(&CpxB, 1, 1);
// ++++++ OP. +++++++++++++++++++
//Add(pCpxA, CpxB);
//Minus(pCpxA, CpxB);
//Multiply(pCpxA, CpxB);
Divide(pCpxA, CpxB);
printf("R:%f\n", pCpxA->r);
printf("V:%f\n", pCpxA->v);
//system("pause");
return 0;
}
void Assign(pCpx A, ItermType r, ItermType v){
A->r = r;
A->v = v;
}
void Add(pCpx A, Cpx B){
A->r += B.r;
A->v += B.v;
}
void Minus(pCpx A, Cpx B){
A->r -= B.r;
A->v -= B.v;
}
void Multiply(pCpx A, Cpx B){
ItermType NewR, NewV;
NewR = A->r * B.r - A->v * B.v;
NewV = A->r * B.v + A->v * B.r;
A->r = NewR;
A->v = NewV;
}
void Divide(pCpx A, Cpx B){
ItermType NewR, NewV, MODE;
MODE = pow(B.r, 2) + pow(B.v, 2);
if(MODE == 0){
printf("B shouldnt be 0\n");
return;
}
NewR = (A->r*B.r+A->v*B.v)/MODE;
NewV = (A->v*B.r-A->r*B.v)/MODE;
A->r = NewR;
A->v = NewV;
}