diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+0.7
+---
+* Corrected the definition of `mignitude`.
+* Added a notion of `distance` between intervals
+
 0.6
 ---
 * Added `Numeric.Interval.Exception`. For consistency, we tend to throw exceptions now instead of rely on `NaN` when working with empty intervals.
diff --git a/intervals.cabal b/intervals.cabal
--- a/intervals.cabal
+++ b/intervals.cabal
@@ -1,5 +1,5 @@
 name:              intervals
-version:           0.6
+version:           0.7
 synopsis:          Interval Arithmetic
 description:
   A 'Numeric.Interval.Interval' is a closed, convex set of floating point values.
diff --git a/src/Numeric/Interval.hs b/src/Numeric/Interval.hs
--- a/src/Numeric/Interval.hs
+++ b/src/Numeric/Interval.hs
@@ -30,6 +30,7 @@
   , bisectIntegral
   , magnitude
   , mignitude
+  , distance
   , contains
   , isSubsetOf
   , certainly, (<!), (<=!), (==!), (>=!), (>!)
diff --git a/src/Numeric/Interval/Internal.hs b/src/Numeric/Interval/Internal.hs
--- a/src/Numeric/Interval/Internal.hs
+++ b/src/Numeric/Interval/Internal.hs
@@ -38,6 +38,7 @@
   , bisectIntegral
   , magnitude
   , mignitude
+  , distance
   , contains
   , isSubsetOf
   , certainly, (<!), (<=!), (==!), (>=!), (>!)
@@ -243,6 +244,22 @@
 mignitude :: (Num a, Ord a) => Interval a -> a
 mignitude = inf . abs
 {-# INLINE mignitude #-}
+
+-- | Hausdorff distance between intervals.
+--
+-- >>> distance (1 ... 7) (6 ... 10)
+-- 0
+--
+-- >>> distance (1 ... 7) (15 ... 24)
+-- 8
+--
+-- >>> distance (1 ... 7) (-10 ... -2)
+-- 3
+--
+-- >>> distance Empty (1 ... 1)
+-- *** Exception: empty interval
+distance :: (Num a, Ord a) => Interval a -> Interval a -> a
+distance i1 i2 = mignitude (i1 - i2)
 
 instance (Num a, Ord a) => Num (Interval a) where
   I a b + I a' b' = (a + a') ... (b + b')
diff --git a/src/Numeric/Interval/Kaucher.hs b/src/Numeric/Interval/Kaucher.hs
--- a/src/Numeric/Interval/Kaucher.hs
+++ b/src/Numeric/Interval/Kaucher.hs
@@ -37,6 +37,7 @@
   , bisect
   , magnitude
   , mignitude
+  , distance
   , contains
   , isSubsetOf
   , certainly, (<!), (<=!), (==!), (>=!), (>!)
@@ -236,7 +237,7 @@
 -- >>> magnitude (singleton 5)
 -- 5
 magnitude :: (Num a, Ord a) => Interval a -> a
-magnitude x = (max `on` abs) (inf x) (sup x)
+magnitude = sup . abs
 {-# INLINE magnitude #-}
 
 -- | \"mignitude\"
@@ -245,14 +246,33 @@
 -- 1
 --
 -- >>> mignitude (-20 ... 10)
--- 10
+-- 0
 --
 -- >>> mignitude (singleton 5)
 -- 5
+--
+-- >>> mignitude empty
+-- NaN
 mignitude :: (Num a, Ord a) => Interval a -> a
-mignitude x = (min `on` abs) (inf x) (sup x)
+mignitude = inf . abs
 {-# INLINE mignitude #-}
 
+-- | Hausdorff distance between non-empty intervals.
+--
+-- >>> distance (1 ... 7) (6 ... 10)
+-- 0
+--
+-- >>> distance (1 ... 7) (15 ... 24)
+-- 8
+--
+-- >>> distance (1 ... 7) (-10 ... -2)
+-- 3
+--
+-- >>> distance empty (1 ... 1)
+-- NaN
+distance :: (Num a, Ord a) => Interval a -> Interval a -> a
+distance i1 i2 = mignitude (i1 - i2)
+
 instance (Num a, Ord a) => Num (Interval a) where
   I a b + I a' b' = (a + a') ... (b + b')
   {-# INLINE (+) #-}
@@ -266,7 +286,8 @@
   abs x@(I a b)
     | a >= 0    = x
     | b <= 0    = negate x
-    | otherwise = 0 ... max (- a) b
+    | b > 0 && a < 0 = 0 ... max (- a) b
+    | otherwise      = x -- preserve the empty interval
   {-# INLINE abs #-}
 
   signum = increasing signum
diff --git a/src/Numeric/Interval/NonEmpty.hs b/src/Numeric/Interval/NonEmpty.hs
--- a/src/Numeric/Interval/NonEmpty.hs
+++ b/src/Numeric/Interval/NonEmpty.hs
@@ -30,6 +30,7 @@
   , singular
   , width
   , midpoint
+  , distance
   , intersection
   , hull
   , bisect
diff --git a/src/Numeric/Interval/NonEmpty/Internal.hs b/src/Numeric/Interval/NonEmpty/Internal.hs
--- a/src/Numeric/Interval/NonEmpty/Internal.hs
+++ b/src/Numeric/Interval/NonEmpty/Internal.hs
@@ -29,6 +29,7 @@
   , singular
   , width
   , midpoint
+  , distance
   , intersection
   , hull
   , bisect
@@ -246,6 +247,19 @@
 midpoint :: Fractional a => Interval a -> a
 midpoint (I a b) = a + (b - a) / 2
 {-# INLINE midpoint #-}
+
+-- | Hausdorff distance between intervals.
+--
+-- >>> distance (1 ... 7) (6 ... 10)
+-- 0
+--
+-- >>> distance (1 ... 7) (15 ... 24)
+-- 8
+--
+-- >>> distance (1 ... 7) (-10 ... -2)
+-- 3
+distance :: (Num a, Ord a) => Interval a -> Interval a -> a
+distance i1 i2 = mignitude (i1 - i2)
 
 -- | Determine if a point is in the interval.
 --
