on master help sign in
Update roundTo to correspond to base-4.6.0.0 changes (gh-105)
commit7e66b81e4775f94c4b77a4aa47de47da14af5fc6 authorBryan O'Sullivan <bos@serpentine.com> dateFri 12 Dec 2014, 12:37 (12 years ago) parent789c63f
1 file changed+28
Data/Text/Internal/Builder/RealFloat/Functions.hs+28
Data/Text/Internal/Builder/RealFloat/Functions.hs+28
@@ -1,3 +1,5 @@
1+{-# LANGUAGE CPP #-}
2+
13-- |
24-- Module: Data.Text.Internal.Builder.RealFloat.Functions
35-- Copyright: (c) The University of Glasgow 1994-2002
@@ -13,6 +15,30 @@ module Data.Text.Internal.Builder.RealFloat.Functions
1315 ) where
1416
1517roundTo :: Int -> [Int] -> (Int,[Int])
18+
19+#if MIN_VERSION_base(4,6,0)
20+
21+roundTo d is =
22+ case f d True is of
23+ x@(0,_) -> x
24+ (1,xs) -> (1, 1:xs)
25+ _ -> error "roundTo: bad Value"
26+ where
27+ b2 = base `quot` 2
28+
29+ f n _ [] = (0, replicate n 0)
30+ f 0 e (x:xs) | x == b2 && e && all (== 0) xs = (0, []) -- Round to even when at exactly half the base
31+ | otherwise = (if x >= b2 then 1 else 0, [])
32+ f n _ (i:xs)
33+ | i' == base = (1,0:ds)
34+ | otherwise = (0,i':ds)
35+ where
36+ (c,ds) = f (n-1) (even i) xs
37+ i' = c + i
38+ base = 10
39+
40+#else
41+
1642roundTo d is =
1743 case f d is of
1844 x@(0,_) -> x
@@ -27,3 +53,5 @@ roundTo d is =
2753 where
2854 (c,ds) = f (n-1) xs
2955 i' = c + i
56+
57+#endif