]> git.unchartedbackwaters.co.uk Git - francis/lta.git/commitdiff
Fix raising rationals to negative integers.
authorFrancis Russell <francis@unchartedbackwaters.co.uk>
Fri, 12 Apr 2013 16:10:17 +0000 (17:10 +0100)
committerFrancis Russell <francis@unchartedbackwaters.co.uk>
Fri, 12 Apr 2013 16:10:17 +0000 (17:10 +0100)
Haskell's Ratio implementation complains about negative exponents.

LTA/Symbolic.hs

index 3472fcba9f78b700e58feede7e3e332c33d2bd5f..c0e04d05cf97e78bedb7e35bb53e951ca9c96d73 100644 (file)
@@ -10,7 +10,7 @@ module LTA.Symbolic
   ) where
 
 import Control.Applicative ((<$>))
-import Data.Ratio (numerator, denominator, (%))
+import Data.Ratio (numerator, denominator)
 import Data.List (foldl')
 import Data.Map (Map)
 import qualified Data.Map as Map
@@ -150,7 +150,9 @@ evalPow (Literal a) (Literal b) = evalPow' a b where
   evalPow' (FloatLiteral x) (FloatLiteral y) = Just . FloatLiteral $ x ** y
   evalPow' (RationalLiteral x) (RationalLiteral y) = if (denominator y) == 1
     then let power = numerator y in
-      Just . RationalLiteral $ (numerator x ^ power) % (denominator x ^ power)
+     Just . RationalLiteral $ if power >= 0
+       then x ^ power
+       else (recip x) ^ (- power)
     else Nothing
   evalPow' _ _ = Nothing
 evalPow _ _ = Nothing