From 47e3928198d1213af12a38395f8752ea0e44f231 Mon Sep 17 00:00:00 2001 From: radrow Date: Fri, 7 Feb 2020 22:40:14 +0100 Subject: [PATCH] Fix bugs in Frac --- priv/stdlib/Frac.aes | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/priv/stdlib/Frac.aes b/priv/stdlib/Frac.aes index d384b5a..1a58012 100644 --- a/priv/stdlib/Frac.aes +++ b/priv/stdlib/Frac.aes @@ -38,11 +38,14 @@ namespace Frac = Zero => "0" function simplify(f : frac) : frac = - let cd = gcd(num(f), den(f)) switch(f) - Neg(n, d) => Neg(n / cd, d / cd) + Neg(n, d) => + let cd = gcd(n, d) + Neg(n / cd, d / cd) Zero => Zero - Pos(n, d) => Pos(n / cd, d / cd) + Pos(n, d) => + let cd = gcd(n, d) + Pos(n / cd, d / cd) function make_frac(n : int, d : int): frac = if (d == 0) abort("Division by zero") @@ -83,7 +86,7 @@ namespace Frac = function from_int(n : int) : frac = if (n > 0) Pos(n, 1) - elif (n < 0) Neg(n, 1) + elif (n < 0) Neg(-n, 1) else Zero function floor(f : frac) : int = switch(f) @@ -111,8 +114,8 @@ namespace Frac = let cl = ceil(f) let dif_fl = abs(sub(f, from_int(fl))) let dif_cl = abs(sub(f, from_int(cl))) - if (dif_fl > dif_cl) cl - elif (dif_cl > dif_fl) fl + if (gt(dif_fl, dif_cl)) cl + elif (gt(dif_cl, dif_fl)) fl elif (fl mod 2 == 0) fl else cl