doubleEqualApprox :: Double -> Double -> PropertyCheck
doubleEqualApprox d1 d2 = propertyCompare name (<) (abs d) lim
  where
        d = d2 - d1

        name = show d1 <> " - " <> show d2 <> " (differential=" <> show (abs d) <> " )" <> " < " <> show lim

        lim = min d1 d2 * (10^^(-15 :: Int))
doubleEqualApprox :: Double -> Double -> PropertyCheck
doubleEqualApprox d1 d2 = propertyCompare name (<) (abs d) lim
  where
        d = d2 - d1

        name = show d1 <> " - " <> show d2 <> " (differential=" <> show (abs d) <> " )" <> " < " <> show lim

        lim = min d1 d2 * (10^^(-15 :: Int))
doubleEqualApprox d1 d2 = propertyCompare name (<) (abs d) lim
  where
        d = d2 - d1

        name = show d1 <> " - " <> show d2 <> " (differential=" <> show (abs d) <> " )" <> " < " <> show lim

        lim = min d1 d2 * (10^^(-15 :: Int))