diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for fp-ieee
 
+## Version 0.1.0.4 (2024-02-18)
+
+* Documentation chanegs.
+
 ## Version 0.1.0.3 (2023-11-18)
 
 * Allow ghc-bignum 1.3.
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright ARATA Mizuki (c) 2020
+Copyright ARATA Mizuki (c) 2020-2024
 
 All rights reserved.
 
diff --git a/doctests.hs b/doctests.hs
--- a/doctests.hs
+++ b/doctests.hs
@@ -3,6 +3,7 @@
 main :: IO ()
 main = doctest [ "-isrc"
                , "-fobject-code" -- for GHC 8.6
+               , "src/Numeric/Floating/IEEE/Internal/Augmented.hs"
                , "src/Numeric/Floating/IEEE/Internal/Base.hs"
                , "src/Numeric/Floating/IEEE/Internal/Classify.hs"
                , "src/Numeric/Floating/IEEE/Internal/FMA.hs"
@@ -10,5 +11,7 @@
                , "src/Numeric/Floating/IEEE/Internal/IntegerInternals.hs"
                , "src/Numeric/Floating/IEEE/Internal/MinMax.hs"
                , "src/Numeric/Floating/IEEE/Internal/NextFloat.hs"
+               , "src/Numeric/Floating/IEEE/Internal/Rounding/Common.hs"
+               , "src/Numeric/Floating/IEEE/Internal/Rounding/Rational.hs"
                , "src/Numeric/Floating/IEEE/Internal/RoundToIntegral.hs"
                ]
diff --git a/fp-ieee.cabal b/fp-ieee.cabal
--- a/fp-ieee.cabal
+++ b/fp-ieee.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name:           fp-ieee
-version:        0.1.0.3
+version:        0.1.0.4
 synopsis:       IEEE 754-2019 compliant operations
 description:    Please see the README on GitHub at <https://github.com/minoki/haskell-floating-point/tree/master/fp-ieee#readme>
 category:       Numeric, Math
@@ -9,7 +9,7 @@
 bug-reports:    https://github.com/minoki/haskell-floating-point/issues
 author:         ARATA Mizuki
 maintainer:     minorinoki@gmail.com
-copyright:      2020-2023 ARATA Mizuki
+copyright:      2020-2024 ARATA Mizuki
 license:        BSD-3-Clause
 license-file:   LICENSE
 build-type:     Simple
diff --git a/src/Numeric/Floating/IEEE.hs b/src/Numeric/Floating/IEEE.hs
--- a/src/Numeric/Floating/IEEE.hs
+++ b/src/Numeric/Floating/IEEE.hs
@@ -118,7 +118,7 @@
   --
   -- |
   -- For IEEE-compliant floating-point types, 'negate' from "Prelude" should comply with IEEE semantics.
-  -- 'abs' should also comply with IEEE semantics, but unfortunately it does not handle the sign bit of NaN on via-C backend and SPARC NCG backend.
+  -- On GHC 9.6 or later, 'abs' should also comply with IEEE semantics (GHC <= 9.4 did not handle the sign bit of NaN on via-C backend and SPARC NCG backend).
   , negate
   , abs
   -- |
@@ -210,8 +210,9 @@
 --
 --     * '(+)', '(-)', and '(*)' should be correctly-rounding.
 --     * 'negate' should comply with IEEE semantics.
---     * 'abs' should comply with IEEE semantics, but unfortunately it does not handle the sign bit of NaN for 'Float' and 'Double' on via-C backend and SPARC NCG backend.
---     * 'fromInteger' should be correctly-rounding, but unfortunately not for 'Float' and 'Double' on GHC <= 9.0 (see GHC's [#17231](https://gitlab.haskell.org/ghc/ghc/-/issues/17231)).
+--     * 'abs' should comply with IEEE semantics (GHC <= 9.4 did not handle the sign bit of NaN for 'Float' and 'Double' on via-C backend and SPARC NCG backend. See GHC's [#21043](https://gitlab.haskell.org/ghc/ghc/-/issues/21043)).
+--     * 'fromInteger' should be correctly-rounding, but some third-party floating-point types may fail to do so
+--       (also, GHC <= 9.0 failed to do so for 'Float' and 'Double'. See GHC's [#17231](https://gitlab.haskell.org/ghc/ghc/-/issues/17231)).
 --       This module provides an always-correctly-rounding alternative: 'fromIntegerTiesToEven'.
 --
 -- == 'Fractional'
diff --git a/src/Numeric/Floating/IEEE/Internal/Augmented.hs b/src/Numeric/Floating/IEEE/Internal/Augmented.hs
--- a/src/Numeric/Floating/IEEE/Internal/Augmented.hs
+++ b/src/Numeric/Floating/IEEE/Internal/Augmented.hs
@@ -12,8 +12,33 @@
 
 default ()
 
+-- $setup
+-- >>> :set -XDeriveFunctor
+-- >>> import Numeric.Floating.IEEE.Internal.Augmented
+-- >>> import Numeric.Floating.IEEE.Internal.Rounding.Common
+-- >>> import Numeric.Floating.IEEE.Internal.Rounding.Rational
+-- >>> :{
+-- newtype RoundTiesTowardZero a = RoundTiesTowardZero { roundTiesTowardZero :: a }
+--   deriving (Functor)
+-- instance RoundingStrategy RoundTiesTowardZero where
+--   exact = RoundTiesTowardZero
+--   inexact o _neg _parity zero away = RoundTiesTowardZero $ case o of
+--                                                              LT -> zero
+--                                                              EQ -> zero
+--                                                              GT -> away
+--   doRound _exact o _neg _parity zero away = RoundTiesTowardZero $ case o of
+--     LT -> zero
+--     EQ -> zero
+--     GT -> away
+-- :}
+
 -- |
 -- IEEE 754 @augmentedAddition@ operation.
+--
+-- The first return value is the approximation of the sum, and the second return value is the error.
+--
+-- prop> fst (augmentedAddition x y) == roundTiesTowardZero (fromRationalR (toRational x + toRational y)) `const` (x :: Double)
+-- prop> let (u, v) = augmentedAddition x y in toRational u + toRational v == toRational x + toRational y `const` (x :: Double)
 augmentedAddition :: RealFloat a => a -> a -> (a, a)
 augmentedAddition !x !y
   | isNaN x || isInfinite x || isNaN y || isInfinite y = let !result = x + y in (result, result)
@@ -50,11 +75,21 @@
 
 -- |
 -- IEEE 754 @augmentedSubtraction@ operation.
+--
+-- The first return value is the approximation of the difference, and the second return value is the error.
+--
+-- prop> fst (augmentedSubtraction x y) == roundTiesTowardZero (fromRationalR (toRational x - toRational y)) `const` (x :: Double)
+-- prop> let (u, v) = augmentedSubtraction x y in toRational u + toRational v == toRational x - toRational y `const` (x :: Double)
 augmentedSubtraction :: RealFloat a => a -> a -> (a, a)
 augmentedSubtraction x y = augmentedAddition x (negate y)
 
 -- |
 -- IEEE 754 @augmentedMultiplication@ operation.
+--
+-- The first return value is the approximation of the product, and the second return value is the error.
+--
+-- prop> fst (augmentedMultiplication x y) == roundTiesTowardZero (fromRationalR (toRational x * toRational y)) `const` (x :: Double)
+-- prop> let (u, v) = augmentedMultiplication x y in toRational u + toRational v == toRational x * toRational y `const` (x :: Double)
 augmentedMultiplication :: RealFloat a => a -> a -> (a, a)
 augmentedMultiplication !x !y
   | isNaN x || isInfinite x || isNaN y || isInfinite y || x * y == 0 = let !result = x * y in (result, result)
diff --git a/src/Numeric/Floating/IEEE/Internal/Base.hs b/src/Numeric/Floating/IEEE/Internal/Base.hs
--- a/src/Numeric/Floating/IEEE/Internal/Base.hs
+++ b/src/Numeric/Floating/IEEE/Internal/Base.hs
@@ -17,6 +17,7 @@
 -- $setup
 -- >>> :set -XHexFloatLiterals -XNumericUnderscores
 -- >>> import Numeric.Floating.IEEE.Internal.NextFloat (nextDown)
+-- >>> import Numeric.Floating.IEEE.Internal.Base
 
 isFloatBinary32 :: Bool
 isFloatBinary32 = isIEEE x
diff --git a/src/Numeric/Floating/IEEE/Internal/NextFloat.hs b/src/Numeric/Floating/IEEE/Internal/NextFloat.hs
--- a/src/Numeric/Floating/IEEE/Internal/NextFloat.hs
+++ b/src/Numeric/Floating/IEEE/Internal/NextFloat.hs
@@ -12,6 +12,7 @@
 
 -- $setup
 -- >>> :set -XHexFloatLiterals -XNumericUnderscores
+-- >>> import Numeric.Floating.IEEE.Internal.Base
 -- >>> import Numeric.Floating.IEEE.Internal.NextFloat
 
 -- |
