From ae2f27cee1e35d5584840a4ba2a096f590771add Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Wed, 4 Dec 2019 17:06:15 +0100 Subject: [PATCH] Fix some edges on Fractional handling --- fractional/src/fractional.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fractional/src/fractional.rs b/fractional/src/fractional.rs index f72e4f7..b97d688 100644 --- a/fractional/src/fractional.rs +++ b/fractional/src/fractional.rs @@ -129,7 +129,11 @@ impl Fractional { } } - inner(1, x / 2, x) + match x { + 0 => 0.into(), + 1 => 1.into(), + _ => inner(1, x / 2, x), + } } let Fractional(n, d) = self; @@ -141,7 +145,7 @@ impl Fractional { }; let d = match d.cmp(&0) { - Ordering::Equal => return Err("division by zero"), + Ordering::Equal => 0.into(), Ordering::Less => return Err("sqrt on negative undefined"), Ordering::Greater => floor_sqrt(d), }; @@ -268,10 +272,7 @@ impl Sub for Fractional { type Output = Self; fn sub(self, other: Self) -> Self { - let Fractional(n1, d1) = self; - let Fractional(n2, d2) = other; - let n = n1 * (self.gcd(other) / d1) - n2 * (self.gcd(other) / d2); - Self(n, self.gcd(other)).reduce() + self + -other } }