in_chainz

Untitled

Feb 24th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. class Complex {
  5. private:
  6.     double re, im;
  7.  
  8. public:
  9.     Complex()
  10.             : re(.0),
  11.               im(.0) {}
  12.  
  13.     explicit Complex(double a)
  14.             : re(a),
  15.               im(.0) {}
  16.  
  17.     Complex(double a, double b)
  18.             : re(a),
  19.               im(b) {}
  20.  
  21.     double Re() const {
  22.         return re;
  23.     }
  24.  
  25.     double &Re() {
  26.         return re;
  27.     }
  28.  
  29.     double Im() const {
  30.         return im;
  31.     }
  32.  
  33.     double &Im() {
  34.         return im;
  35.     }
  36.  
  37.     Complex Conj() const {
  38.         return Complex(re, -im);
  39.     }
  40.  
  41.     Complex operator-() const {
  42.         return Complex(-re, -im);
  43.     }
  44.  
  45.     Complex operator+() const {
  46.         return Complex(re, im);
  47.     }
  48. };
  49.  
  50. double abs(const Complex &z) {
  51.     return sqrt(z.Re() * z.Re() + z.Im() * z.Im());
  52. }
  53.  
  54. Complex operator+(const Complex &one, const Complex &other) {
  55.     return Complex(one.Re() + other.Re(), one.Im() + other.Im());
  56. }
  57.  
  58. Complex operator+(const Complex &one, double other) {
  59.     return Complex(one.Re() + other, one.Im());
  60. }
  61.  
  62. Complex operator+(double other, const Complex &one) {
  63.     return Complex(one.Re() + other, one.Im());
  64. }
  65.  
  66. Complex operator-(const Complex &one, const Complex &other) {
  67.     return Complex(one.Re() - other.Re(), one.Im() - other.Im());
  68. }
  69.  
  70. Complex operator-(const Complex &one, double other) {
  71.     return Complex(one.Re() - other, one.Im());
  72. }
  73.  
  74. Complex operator-(double other, const Complex &one) {
  75.     return Complex(other - one.Re(), -one.Im());
  76. }
  77.  
  78. Complex operator*(const Complex &one, const Complex &other) {
  79.     return Complex(one.Re() * other.Re() - one.Im() * other.Im(),
  80.             one.Re() * other.Im() + one.Im() * other.Re());
  81. }
  82.  
  83. Complex operator*(const Complex &one, double other) {
  84.     return Complex(one.Re() * other, one.Im() * other);
  85. }
  86.  
  87. Complex operator*(double other, const Complex &one) {
  88.     return Complex(one.Re() * other, one.Im() * other);
  89. }
  90.  
  91. Complex operator/(const Complex &one, double other) {
  92.     return Complex(one.Re() / other, one.Im() / other);
  93. }
  94.  
  95. Complex operator/(const Complex &one, const Complex &other) {
  96.     double denom_abs = abs(other);
  97.     Complex inv = other.Conj() / (denom_abs * denom_abs);
  98.     return one * inv;
  99. }
  100.  
  101. Complex operator/(double other, const Complex &one) {
  102.     double denom_abs = abs(one);
  103.     Complex inv = one.Conj() / (denom_abs * denom_abs);
  104.     return other * inv;
  105. }
  106.  
  107. bool operator==(const Complex &one, const Complex &other) {
  108.     return one.Re() == other.Re() && one.Im() == other.Im();
  109. }
  110.  
  111. bool operator!=(const Complex &one, const Complex &other) {
  112.     return one.Re() != other.Re() || one.Im() != other.Im();
  113. }
  114.  
  115. std::ostream &operator<<(std::ostream &out, const Complex &z) {
  116.     out << z.Re() << " " << z.Im() << "i";
  117.     return out;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment