diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+0.9.2
+-----
+* Fixed subtraction better.
+
 0.9.1
 -----
 * Fixed subtraction.
diff --git a/log-domain.cabal b/log-domain.cabal
--- a/log-domain.cabal
+++ b/log-domain.cabal
@@ -1,6 +1,6 @@
 name:          log-domain
 category:      Numeric
-version:       0.9.1
+version:       0.9.2
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
diff --git a/src/Numeric/Log.hs b/src/Numeric/Log.hs
--- a/src/Numeric/Log.hs
+++ b/src/Numeric/Log.hs
@@ -188,6 +188,21 @@
 negInf = -(1/0)
 {-# INLINE negInf #-}
 
+-- | Handle subtraction.
+--
+-- >>> 3 - 1 :: Log Double
+-- 2.0000000000000004
+--
+-- >>> 1 - 3 :: Log Double
+-- NaN
+-- 
+-- >>> 3 - 2 :: Log Float
+-- 1.0
+--
+-- >>> 1 - 3 :: Log Float
+-- NaN
+--
+
 instance (Precise a, RealFloat a) => Num (Log a) where
   Exp a * Exp b
     | isInfinite a && isInfinite b && a == -b = Exp negInf
@@ -399,7 +414,7 @@
   log1pexp a = log1p (exp a)
 
   log1mexp :: a -> a
-  log1mexp a = log1p (negate (exp (negate a)))
+  log1mexp a = log1p (negate (exp a))
 
 instance Precise Double where
   log1p = c_log1p
@@ -407,8 +422,8 @@
   expm1 = c_expm1
   {-# INLINE expm1 #-}
   log1mexp a
-    | a <= log 2 = log (negate (expm1 (negate a)))
-    | otherwise  = log1p (negate (exp (negate a)))
+    | a <= log 2 = log (negate (expm1 a))
+    | otherwise  = log1p (negate (exp a))
   {-# INLINE log1mexp #-}
   log1pexp a
     | a <= 18   = log1p (exp a)
@@ -422,8 +437,8 @@
   {-# INLINE log1p #-}
   expm1 = c_expm1f
   {-# INLINE expm1 #-}
-  log1mexp a | a <= log 2 = log (negate (expm1 (negate a)))
-             | otherwise  = log1p (negate (exp (negate a)))
+  log1mexp a | a <= log 2 = log (negate (expm1 a))
+             | otherwise  = log1p (negate (exp a))
   {-# INLINE log1mexp #-}
   log1pexp a
     | a <= 18   = log1p (exp a)
