Commit ae2f27cee1e35d5584840a4ba2a096f590771add

Authored by Georg Hopp
1 parent 7f9b6744

Fix some edges on Fractional handling

Showing 1 changed file with 7 additions and 6 deletions
@@ -129,7 +129,11 @@ impl Fractional { @@ -129,7 +129,11 @@ impl Fractional {
129 } 129 }
130 } 130 }
131 131
132 - inner(1, x / 2, x) 132 + match x {
  133 + 0 => 0.into(),
  134 + 1 => 1.into(),
  135 + _ => inner(1, x / 2, x),
  136 + }
133 } 137 }
134 138
135 let Fractional(n, d) = self; 139 let Fractional(n, d) = self;
@@ -141,7 +145,7 @@ impl Fractional { @@ -141,7 +145,7 @@ impl Fractional {
141 }; 145 };
142 146
143 let d = match d.cmp(&0) { 147 let d = match d.cmp(&0) {
144 - Ordering::Equal => return Err("division by zero"), 148 + Ordering::Equal => 0.into(),
145 Ordering::Less => return Err("sqrt on negative undefined"), 149 Ordering::Less => return Err("sqrt on negative undefined"),
146 Ordering::Greater => floor_sqrt(d), 150 Ordering::Greater => floor_sqrt(d),
147 }; 151 };
@@ -268,10 +272,7 @@ impl Sub for Fractional { @@ -268,10 +272,7 @@ impl Sub for Fractional {
268 type Output = Self; 272 type Output = Self;
269 273
270 fn sub(self, other: Self) -> Self { 274 fn sub(self, other: Self) -> Self {
271 - let Fractional(n1, d1) = self;  
272 - let Fractional(n2, d2) = other;  
273 - let n = n1 * (self.gcd(other) / d1) - n2 * (self.gcd(other) / d2);  
274 - Self(n, self.gcd(other)).reduce() 275 + self + -other
275 } 276 }
276 } 277 }
277 278
Please register or login to post a comment