From 3500de6cb0edaf6f6be0af50aefe165726e32a7e Mon Sep 17 00:00:00 2001 From: gbrochar Date: Sun, 6 Aug 2023 13:55:18 +0200 Subject: [PATCH] feat(maths): complex div --- src/maths.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/maths.rs b/src/maths.rs index 9460014..d53d778 100644 --- a/src/maths.rs +++ b/src/maths.rs @@ -31,6 +31,11 @@ impl Rational { pub fn inverse(&self) -> Self { Rational::new(self.denominator, self.numerator) } + + pub fn simplify(lhs: Rational, rhs: Rational) -> Self { + let res = Rational::new(lhs.numerator * rhs.denominator, lhs.denominator * rhs.numerator); + res.reduce() + } } impl ops::Add for Rational { @@ -171,5 +176,13 @@ impl ops::Mul for GaussianRational { fn mul(self, rhs: GaussianRational) -> GaussianRational { GaussianRational::new(self.real * rhs.real - self.imaginary * rhs.imaginary, self.real * rhs.imaginary + self.imaginary * rhs.real) } +} + +impl ops::Div for GaussianRational { + type Output = GaussianRational; + + fn div(self, rhs: GaussianRational) -> GaussianRational { + let cd_squared = rhs.real * rhs.real + rhs.imaginary * rhs.imaginary; + GaussianRational::new(Rational::simplify(self.real * rhs.real + self.imaginary * rhs.imaginary, cd_squared), Rational::simplify(self.imaginary * rhs.real - self.real * rhs.imaginary, cd_squared)) } }