From 7fb887bffcabba216b1b0e83647fcf95ddba98ff Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Fri, 3 Apr 2015 15:10:42 -0400 Subject: [PATCH] Require Neg for Complex conj and inv If T is an unsigned integer type, these methods are guaranteed to overflow unless the result is actually real, so we should disallow them for the same reason that Neg was removed from these types. Signed-off-by: Anders Kaseorg --- src/complex.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/complex.rs b/src/complex.rs index e8c7557..a791a8c 100644 --- a/src/complex.rs +++ b/src/complex.rs @@ -56,11 +56,13 @@ impl Complex { pub fn unscale(&self, t: T) -> Complex { Complex::new(self.re.clone() / t.clone(), self.im.clone() / t) } +} +impl> Complex { /// Returns the complex conjugate. i.e. `re - i im` #[inline] pub fn conj(&self) -> Complex { - Complex::new(self.re.clone(), T::zero() - self.im.clone()) + Complex::new(self.re.clone(), -self.im.clone()) } /// Returns `1/self` @@ -68,7 +70,7 @@ impl Complex { pub fn inv(&self) -> Complex { let norm_sqr = self.norm_sqr(); Complex::new(self.re.clone() / norm_sqr.clone(), - T::zero() - self.im.clone() / norm_sqr) + -self.im.clone() / norm_sqr) } }