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)) } }