diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog for the [`ghc-typelits-extra`](http://hackage.haskell.org/package/ghc-typelits-extra) package
 
+## 0.1.3 *July 19th 2016*
+* Fixes bugs:
+  * Rounding error in `CLog` calculation
+
 ## 0.1.2 *July 8th 2016*
 * Solve KnownNat constraints over CLog and GCD, i.e., KnownNat (CLog 2 4)
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,4 +8,4 @@
 as a GHC type-checker plugin:
 
 * `GHC.TypeLits.Extra.GCD`: a type-level `gcd`
-* `GHC.TypeLits.Extra.CLog`: type-level equivalent of `clog x y = ceiling (logBase x y)`
+* `GHC.TypeLits.Extra.CLog`: type-level equivalent of _the ceiling of_ [integerLogBase#](https://hackage.haskell.org/package/integer-gmp/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35-)
diff --git a/ghc-typelits-extra.cabal b/ghc-typelits-extra.cabal
--- a/ghc-typelits-extra.cabal
+++ b/ghc-typelits-extra.cabal
@@ -1,13 +1,12 @@
 name:                ghc-typelits-extra
-version:             0.1.2
+version:             0.1.3
 synopsis:            Additional type-level operations on GHC.TypeLits.Nat
 description:
   Additional type-level operations on @GHC.TypeLits.Nat@:
   .
   * @GHC.TypeLits.Extra.GCD@: a type-level @gcd@
   .
-  * @GHC.TypeLits.Extra.CLog@: type-level equivalent of
-    \"@clog x y = ceiling (logBase x y)@\"
+  * @GHC.TypeLits.Extra.CLog@: type-level equivalent /the ceiling of/ <https://hackage.haskell.org/package/integer-gmp/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
   .
   And a custom solver for the above operations defined in
   @GHC.TypeLits.Extra.Solver@ as a GHC type-checker plugin. To use the plugin,
@@ -49,6 +48,7 @@
   build-depends:       base                >= 4.8  && <5,
                        ghc                 >= 7.10 && <8.2,
                        ghc-tcplugins-extra >= 0.2,
+                       integer-gmp         >= 1.0 && <1.1,
                        transformers        >= 0.4.2.0 && < 0.6
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/GHC/TypeLits/Extra.hs b/src/GHC/TypeLits/Extra.hs
--- a/src/GHC/TypeLits/Extra.hs
+++ b/src/GHC/TypeLits/Extra.hs
@@ -7,8 +7,7 @@
 
   * 'GCD': a type-level 'gcd'
 
-  * 'CLog': type-level equivalent of
-    \"@clog x y = 'ceiling' ('logBase' x y)@\"
+  * 'CLog': type-level equivalent of /the ceiling of/ <https://hackage.haskell.org/package/integer-gmp/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
 
 A custom solver for the above operations defined is defined in
 "GHC.TypeLits.Extra.Solver" as a GHC type-checker plugin. To use the plugin,
@@ -39,11 +38,7 @@
 type family GCD (x :: Nat) (y :: Nat) :: Nat where
   GCD 0 x = x -- Additional equations are provided by the custom solver
 
--- | Type-level equivalent of:
---
--- @
--- clog x y = 'ceiling' ('logBase' x y)
--- @
+-- | Type-level equivalent of /the ceiling of/ <https://hackage.haskell.org/package/integer-gmp/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
 --
 -- Note that additional equations are provided by the type-checker plugin solver
 -- "GHC.TypeLits.Extra.Solver".
diff --git a/src/GHC/TypeLits/Extra/Solver.hs b/src/GHC/TypeLits/Extra/Solver.hs
--- a/src/GHC/TypeLits/Extra/Solver.hs
+++ b/src/GHC/TypeLits/Extra/Solver.hs
@@ -63,8 +63,7 @@
 --
 --   * @GHC.TypeLits.Extra.GCD@: a type-level 'gcd'
 --
---   * @GHC.TypeLits.Extra.CLog@: type-level equivalent of
---     \"@clog x y = 'ceiling' ('logBase' x y)@\"
+--   * @GHC.TypeLits.Extra.CLog@: type-level equivalent of /the ceiling of/ <https://hackage.haskell.org/package/integer-gmp/docs/GHC-Integer-Logarithms.html#v:integerLogBase-35- integerLogBase#>
 --
 -- To use the plugin, add
 --
diff --git a/src/GHC/TypeLits/Extra/Solver/Operations.hs b/src/GHC/TypeLits/Extra/Solver/Operations.hs
--- a/src/GHC/TypeLits/Extra/Solver/Operations.hs
+++ b/src/GHC/TypeLits/Extra/Solver/Operations.hs
@@ -4,7 +4,7 @@
 Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com>
 -}
 
-{-# LANGUAGE CPP, GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE CPP, GeneralizedNewtypeDeriving, MagicHash #-}
 #if __GLASGOW_HASKELL__ < 711
 {-# LANGUAGE StandaloneDeriving #-}
 #endif
@@ -15,12 +15,14 @@
   , mergeGCD
   , mergeCLog
   , mergeExp
-  , mergeAdd
-  , mergeSub
-  , mergeMul
   )
 where
 
+-- external
+import GHC.Base               (isTrue#,(==#),(+#))
+import GHC.Integer            (smallInteger)
+import GHC.Integer.Logarithms (integerLogBase#)
+
 -- GHC API
 import Outputable (Outputable (..), (<+>), integer, text)
 import Type       (Type, TyVar)
@@ -61,26 +63,19 @@
 mergeCLog :: ExtraOp -> ExtraOp -> Maybe ExtraOp
 mergeCLog i (Exp j k)
   | i == j && (i /= (I 0)) = Just k
-mergeCLog (I i) (I j)
-  | i > 1 && j > 0 = Just (I (ceiling (logBase (fromInteger i :: Double)
-                                      (fromInteger j))))
-  | otherwise      = Nothing
-mergeCLog x y = Just (CLog x y)
+mergeCLog (I i) (I j)      = I <$> clogBase i j
+mergeCLog x y              = Just (CLog x y)
 
 mergeExp :: ExtraOp -> ExtraOp -> ExtraOp
 mergeExp (I i) (I j) = I (i^j)
 mergeExp x     y     = Exp x y
 
-mergeAdd :: ExtraOp -> ExtraOp -> Maybe ExtraOp
-mergeAdd (I i) (I j) = Just (I (i + j))
-mergeAdd _     _     = Nothing
-
-mergeSub :: ExtraOp -> ExtraOp -> Maybe ExtraOp
-mergeSub (I i) (I j)
-  | let s = i - j
-  , s >= 0 = Just (I s)
-mergeSub _     _     = Nothing
-
-mergeMul :: ExtraOp -> ExtraOp -> Maybe ExtraOp
-mergeMul (I i) (I j) = Just (I (i * j))
-mergeMul _     _     = Nothing
+-- | \x y -> ceiling (logBase x y), x > 1 && y > 0
+clogBase :: Integer -> Integer -> Maybe Integer
+clogBase x y | x > 1 && y > 0 =
+  let z1 = integerLogBase# x y
+      z2 = integerLogBase# x (y-1)
+  in  if (isTrue# (z1 ==# z2))
+         then Just (smallInteger (z1 +# 1#))
+         else Just (smallInteger z1)
+clogBase _ _ = Nothing
