ad-4.5: src/Numeric/AD/Internal/Doctest.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-----------------------------------------------------------------------------
-- |
-- Copyright : (c) Edward Kmett 2010-2021
-- License : BSD3
-- Maintainer : ekmett@gmail.com
-- Stability : experimental
-- Portability : GHC only
--
-- A version of 'Double' that rounds to the twelfth digit if necessary. This
-- is useful for @ad@'s doctests since they must print out floating-point
-- numbers in their entirety, but the actual numbers that get produced can
-- vary slightly depending on machine-specific implementation details.
-- (See #73 for an example.) This works around the issue by just rounding
-- up the printed result to a point where it should be consistent across
-- all machines.
-----------------------------------------------------------------------------
module Numeric.AD.Internal.Doctest (RDouble) where
import GHC.Float
import Numeric
newtype RDouble = RDouble Double
deriving (Floating, Fractional, Num)
instance Show RDouble where
showsPrec p (RDouble d)
| length is' >= limit
= showSignedFloat (showGFloat (Just limit)) p d
| otherwise
= showsPrec p d
where
limit = 12
(is, e) = floatToDigits 10 (abs d)
is' = drop e is