-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomplex.hpp
94 lines (75 loc) · 2.09 KB
/
complex.hpp
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
83
84
85
86
87
88
89
90
91
92
93
94
#pragma once
#include <iostream>
#define LOWER 0.001
class Complex
{
private:
double _imaginary;
double _real;
public:
Complex();
Complex(const double re, const double im);
double getRe() const;
double getIm() const;
//комплексное сопряжение
Complex conjugate();
//возведение в степень
Complex pow(unsigned int power);
//корректировка погрешностей вычислений
void correctComplex();
//вывод числа
void print() const;
Complex operator+(Complex value)
{
Complex result(this->getRe() + value.getRe(), this->getIm() + value.getIm());
result.correctComplex();
return result;
}
Complex operator-(Complex value)
{
Complex result(this->getRe() - value.getRe(), this->getIm() - value.getIm());
result.correctComplex();
return result;
}
Complex operator+=(Complex value)
{
Complex result = *this + value;
result.correctComplex();
return result;
}
Complex operator*(Complex value)
{
double ReResult, ImResult;
ReResult = this->getRe() * value.getRe() - this->getIm() * value.getIm();
ImResult = this->getRe() * value.getIm() + this->getIm() * value.getRe();
Complex result(ReResult, ImResult);
result.correctComplex();
return result;
}
Complex operator/(Complex denom)
{
double ReResult, ImResult;
Complex denomConj = denom.conjugate();
double denomResult = (denom * denomConj).getRe();
Complex nomResult = *this * denomConj;
ReResult = nomResult.getRe() / denomResult;
ImResult = nomResult.getIm() / denomResult;
Complex result(ReResult, ImResult);
result.correctComplex();
return result;
}
Complex operator/(double denom)
{
double ReResult = this->getRe() / denom;
double ImResult = this->getIm() / denom;
Complex result(ReResult, ImResult);
result.correctComplex();
return Complex(ReResult, ImResult);
}
Complex operator=(Complex value)
{
_imaginary = value.getIm();
_real = value.getRe();
return *this;
}
};