-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomplex.c
More file actions
51 lines (40 loc) · 1.17 KB
/
Copy pathcomplex.c
File metadata and controls
51 lines (40 loc) · 1.17 KB
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
#include "complex.h"
complex complex_vector_mul(complex *v1, complex *v2, unsigned long long int n) {
complex c = {0.0, 0.0};
for (unsigned long long int i = 0; i < n; i++) {
c = complex_sum(c, complex_mul(v1[i], v2[i]));
}
return c;
}
complex complex_mul(complex c1, complex c2) {
complex result;
result.real = c1.real * c2.real - c1.imaginary * c2.imaginary;
result.imaginary = c1.real * c2.imaginary + c1.imaginary * c2.real;
return result;
}
complex complex_sum(complex c1, complex c2) {
complex result;
result.real = c1.real + c2.real;
result.imaginary = c1.imaginary + c2.imaginary;
return result;
}
void complex_print(complex c) {
if (c.real == 0 && c.imaginary == 0) {
printf("0");
return;
}
if (c.real != 0) {
printf("%.4g", c.real);
}
if (c.imaginary != 0) {
if (c.imaginary > 0 && c.real != 0)
printf("+");
else if (c.imaginary < 0)
printf("-");
double abs_imag = c.imaginary < 0 ? -c.imaginary : c.imaginary;
if (abs_imag == 1.0f)
printf("i");
else
printf("i%.4g", abs_imag);
}
}