Added rational numbers #711
@ -38,11 +38,14 @@ namespace Frac =
|
|||||||
Zero => "0"
|
Zero => "0"
|
||||||
|
|
||||||
function simplify(f : frac) : frac =
|
function simplify(f : frac) : frac =
|
||||||
let cd = gcd(num(f), den(f))
|
|
||||||
switch(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
|
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 =
|
function make_frac(n : int, d : int): frac =
|
||||||
if (d == 0) abort("Division by zero")
|
if (d == 0) abort("Division by zero")
|
||||||
@ -83,7 +86,7 @@ namespace Frac =
|
|||||||
|
|
||||||
function from_int(n : int) : frac =
|
function from_int(n : int) : frac =
|
||||||
if (n > 0) Pos(n, 1)
|
if (n > 0) Pos(n, 1)
|
||||||
elif (n < 0) Neg(n, 1)
|
elif (n < 0) Neg(-n, 1)
|
||||||
else Zero
|
else Zero
|
||||||
|
|
||||||
function floor(f : frac) : int = switch(f)
|
function floor(f : frac) : int = switch(f)
|
||||||
@ -111,8 +114,8 @@ namespace Frac =
|
|||||||
let cl = ceil(f)
|
let cl = ceil(f)
|
||||||
let dif_fl = abs(sub(f, from_int(fl)))
|
let dif_fl = abs(sub(f, from_int(fl)))
|
||||||
let dif_cl = abs(sub(f, from_int(cl)))
|
let dif_cl = abs(sub(f, from_int(cl)))
|
||||||
if (dif_fl > dif_cl) cl
|
if (gt(dif_fl, dif_cl)) cl
|
||||||
elif (dif_cl > dif_fl) fl
|
elif (gt(dif_cl, dif_fl)) fl
|
||||||
elif (fl mod 2 == 0) fl
|
elif (fl mod 2 == 0) fl
|
||||||
else cl
|
else cl
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user