include/complex.h
Go to the documentation of this file.
1 
18 #ifndef __COMPLEX_H
19 #define __COMPLEX_H
20 
21 #include <cmath>
22 #include <cstdio>
23 
24 double epsilon= 0.0000001;
25 
26 struct complex { double r; double i;};
27 
28 complex czero = {0,0};
29 
31 {
32  complex r;
33  r.r=a.r*b.r-a.i*b.i;
34  r.i=a.i*b.r+a.r*b.i;
35  return r;
36 }
37 
39 {
40  complex r;
41  r.r=a.r+b.r;
42  r.i=a.i+b.i;
43  return r;
44 }
45 
47 {
48  complex r;
49  r.r=a.r-b.r;
50  r.i=a.i-b.i;
51  return r;
52 }
53 
54 complex r2c(double x)
55 {
56  complex r;
57  r.r=x;
58  r.i=0;
59  return r;
60 }
61 
63 {
64  return ((a.r==b.r)&&(a.i==b.i));
65 }
66 
68 {
69  return ((abs(a.r-b.r)<epsilon)&&(abs(a.i-b.i)<epsilon));
70 }
71 
73 {
74  complex r;
75  r=a;
76  for (int i=1;i<b;i++) r=cmul(r,a);
77  return r;
78 }
79 
81 {
82  complex r;
83  double B=b.r*b.r+b.i*b.i;
84  r.r=(a.r*b.r+a.i*b.i)/B;
85  r.i=(a.i*b.r-a.r*b.i)/B;
86  return r;
87 }
88 
90  complex r;
91  double length,angle;
92  length=exp(a.r);
93  angle=a.i;
94  r.r=cos(angle)*length;
95  r.i=sin(angle)*length;
96  return r;
97 }
98 
100  complex r;
101  double length,angle;
102  length=sqrt(a.r*a.r+a.i*a.i);
103  angle=atan2(a.i,a.r);
104  r.r=log(length);
105  r.i=angle;
106  return r;
107 }
108 
110  complex r;
111  r.r=-a.r;
112  r.i=-a.i;
113  return r;
114 }
115 
117  return a;
118 }
119 
121 {
122  complex r;
123  double length,angle;
124  length=sqrt(sqrt(a.r*a.r+a.i*a.i));
125  angle=atan2(a.i,a.r)/2;
126  r.r=cos(angle)*length;
127  r.i=sin(angle)*length;
128  return r;
129 }
130 
132 {
133  printf("%f",c.r);
134  if (c.i>0) printf("+%fi",c.i);
135  if (c.i<0) printf("%fi",c.i);
136  printf("\n");
137 }
138 
140 {
141  return (abs(x.i)<=epsilon);
142 }
143 #endif
complex csqrt(complex a)
bool isEqual(complex a, complex b)
double r
complex cexp(complex a)
TFSIMD_FORCE_INLINE tfScalar angle(const Quaternion &q1, const Quaternion &q2)
complex czero
complex csub(complex a, complex b)
complex cpos(complex a)
complex cneg(complex a)
complex cadd(complex a, complex b)
void cprint(complex c)
complex cpow(complex a, int b)
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
complex cmul(complex a, complex b)
bool isEqualE(complex a, complex b)
double i
complex cdiv(complex a, complex b)
bool isReal(complex x)
complex r2c(double x)
double abs(quaternion a)
double epsilon
complex cln(complex a)


asr_flock_of_birds
Author(s): Bernhardt Andre, Engelmann Stephan, Giesler Björn, Heller Florian, Jäkel Rainer, Nguyen Trung, Pardowitz Michael, Weckesser Peter, Yi Xie, Zöllner Raoul
autogenerated on Mon Jun 10 2019 12:44:40