Commit ae2f27cee1e35d5584840a4ba2a096f590771add
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