diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,10 @@
+0.10
+----
+* `(**)` is now much more accurately defined.
+* We now avoid comparisons for equality with infinities.
+* Fixed a bug in `negate`.
+* On windows we avoid FFI into the math library, and accept less accurate results. (Sorry!)
+
 0.9.3
 -------
 * Fixed subtraction again. For real this time.
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2011 Edward Kmett
+Copyright 2011-2015 Edward Kmett
 
 All rights reserved.
 
@@ -12,10 +12,6 @@
 2. Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the author nor the names of his contributors
-   may be used to endorse or promote products derived from this software
-   without specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
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.3
+version:       0.10
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -9,7 +9,7 @@
 stability:     provisional
 homepage:      http://github.com/analytics/log-domain/
 bug-reports:   http://github.com/analytics/log-domain/issues
-copyright:     Copyright (C) 2013 Edward A. Kmett
+copyright:     Copyright (C) 2013-2015 Edward A. Kmett
 build-type:    Custom
 tested-with:   GHC == 7.4.1, GHC == 7.6.3
 synopsis:      Log-domain arithmetic
@@ -39,6 +39,10 @@
   default: False
   manual: True
 
+flag ffi
+  default: True
+  manual: True
+
 library
   build-depends:
     base                      >= 4.3      && < 5,
@@ -61,6 +65,9 @@
 
   if flag(lib-Werror)
     ghc-options: -Werror
+
+  if flag(ffi) && !os(windows)
+    cpp-options: -D__USE_FFI__
 
   ghc-options: -Wall -fwarn-tabs -O2
   hs-source-dirs: src
diff --git a/src/Numeric/Log.hs b/src/Numeric/Log.hs
--- a/src/Numeric/Log.hs
+++ b/src/Numeric/Log.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE ForeignFunctionInterface #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric #-}
@@ -8,7 +9,7 @@
 {-# LANGUAGE Trustworthy #-}
 --------------------------------------------------------------------
 -- |
--- Copyright :  (c) Edward Kmett 2013
+-- Copyright :  (c) Edward Kmett 2013-2015
 -- License   :  BSD3
 -- Maintainer:  Edward Kmett <ekmett@gmail.com>
 -- Stability :  experimental
@@ -214,15 +215,14 @@
     | otherwise = Exp (b + log1pexp (a - b))
   {-# INLINE (+) #-}
   Exp a - Exp b
-    | a == negInf && b == negInf = Exp negInf
+    | isInfinite a && isInfinite b && a < 0 && b < 0 = Exp negInf
     | otherwise = Exp (a + log1mexp (b - a))
   {-# INLINE (-) #-}
   signum (Exp a)
-    | a == negInf = 0
-    | a > negInf  = 1
-    | otherwise   = negInf
+    | isInfinite a && a < 0 = Exp negInf -- 0
+    | otherwise             = Exp 0      -- 1
   {-# INLINE signum #-}
-  negate _ = negInf
+  negate _ = Exp negInf
   {-# INLINE negate #-}
   abs = id
   {-# INLINE abs #-}
@@ -233,7 +233,7 @@
   -- n/0 == infinity is handled seamlessly for us. We must catch 0/0 and infinity/infinity NaNs, and handle 0/infinity.
   Exp a / Exp b
     | a == b && isInfinite a && isInfinite b = Exp negInf
-    | a == negInf                            = Exp negInf
+    | isInfinite a && a < 0                  = Exp negInf
     | otherwise                              = Exp (a-b)
   {-# INLINE (/) #-}
   fromRational = Exp . log . fromRational
@@ -348,6 +348,8 @@
   {-# INLINE exp #-}
   log (Exp a) = Exp (log a)
   {-# INLINE log #-}
+  Exp b ** Exp e = Exp (b * exp e)
+  {-# INLINE (**) #-}
   sqrt (Exp a) = Exp (a / 2)
   {-# INLINE sqrt #-}
   logBase (Exp a) (Exp b) = Exp (log (logBase (exp a) (exp b)))
@@ -456,7 +458,29 @@
     | otherwise = log (1 + x)
   {-# INLINE log1p #-}
 
+#ifdef __USE_FFI__
+
 foreign import ccall unsafe "math.h log1p" c_log1p :: Double -> Double
 foreign import ccall unsafe "math.h expm1" c_expm1 :: Double -> Double
 foreign import ccall unsafe "math.h expm1f" c_expm1f :: Float -> Float
 foreign import ccall unsafe "math.h log1pf" c_log1pf :: Float -> Float
+
+#else
+
+c_log1p :: Double -> Double
+{-# INLINE c_log1p #-}
+c_log1p x = log (1 + x)
+
+c_expm1 :: Double -> Double
+{-# INLINE c_expm1 #-}
+c_expm1 x = exp x - 1
+
+c_expm1f :: Float -> Float
+{-# INLINE c_expm1f #-}
+c_expm1f x = exp x - 1
+
+c_log1pf :: Float -> Float
+{-# INLINE c_log1pf #-}
+c_log1pf x = log (1 + x)
+
+#endif
