From fb1f8d3a02908e2fe8c08924c2eacef6b84a7204 Mon Sep 17 00:00:00 2001 From: Raymond Hogenson Date: Fri, 18 May 2018 12:01:22 -0800 Subject: Support exponentiation Haskell might make this overcomplicated, but it's a complicated problem to solve, I suppose. Whatever. It works well. --- RealCalc.hs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'RealCalc.hs') diff --git a/RealCalc.hs b/RealCalc.hs index 11eebe4..df2e06d 100644 --- a/RealCalc.hs +++ b/RealCalc.hs @@ -54,6 +54,12 @@ simplify (Expr.Times e1 e2) = genericCombine (*) (simplify e1) (simplify e2) simplify (Expr.Div e1 e2) = RFloat (rToDouble (simplify e1) / rToDouble (simplify e2)) +simplify (Expr.Pow e1 e2) = + case (simplify e1, simplify e2) of + (RInt a, RInt b) + | b >= 0 -> RInt (a ^ b) + (a, RInt b) -> RFloat (rToDouble a ^^ b) + (a, RFloat b) -> RFloat (rToDouble a ** b) simplify (Expr.EInt i) = RInt i simplify (Expr.EFloat d) = RFloat d simplify Expr.E = RFloat (exp 1) -- cgit v1.3.1