variable-precision 0.2.1 → 0.3.1
raw patch · 10 files changed
+250/−161 lines, 10 filesdep +complex-generic
Dependencies added: complex-generic
Files
- Numeric/VariablePrecision.hs +1/−1
- Numeric/VariablePrecision/Algorithms.hs +1/−1
- Numeric/VariablePrecision/Aliases.hs +50/−22
- Numeric/VariablePrecision/Complex.hs +185/−128
- Numeric/VariablePrecision/Fixed.hs +5/−2
- Numeric/VariablePrecision/Float.hs +1/−1
- Numeric/VariablePrecision/Precision.hs +1/−1
- Numeric/VariablePrecision/Precision/Reify.hs +1/−1
- TypeLevel/NaturalNumber/ExtraNumbers.hs +1/−1
- variable-precision.cabal +4/−3
Numeric/VariablePrecision.hs view
@@ -3,7 +3,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : portable
Numeric/VariablePrecision/Algorithms.hs view
@@ -4,7 +4,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : BangPatterns
Numeric/VariablePrecision/Aliases.hs view
@@ -3,7 +3,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : portable @@ -15,10 +15,15 @@ module Numeric.VariablePrecision.Aliases ( toFloat, fromFloat, toDouble, fromDouble , toComplexFloat, fromComplexFloat, toComplexDouble, fromComplexDouble+ , F, X, C, CF, CX , F8, F16, F24, F32, F40, F48, F53 , f8, f16, f24, f32, f40, f48, f53- , C8, C16, C24, C32, C40, C48, C53- , c8, c16, c24, c32, c40, c48, c53+ , X8, X16, X24, X32, X40, X48, X53+ , x8, x16, x24, x32, x40, x48, x53+ , CF8, CF16, CF24, CF32, CF40, CF48, CF53+ , cf8, cf16, cf24, cf32, cf40, cf48, cf53+ , CX8, CX16, CX24, CX32, CX40, CX48, CX53+ , cx8, cx16, cx24, cx32, cx40, cx48, cx53 , module TypeLevel.NaturalNumber , module TypeLevel.NaturalNumber.ExtraNumbers ) where@@ -28,10 +33,11 @@ (N16, n16, N24, n24, N32, n32, N40, n40, N48, n48, N53, n53) import Numeric.VariablePrecision.Float (VFloat)+import Numeric.VariablePrecision.Fixed (VFixed) import Numeric.VariablePrecision.Complex (VComplex, recodeComplex, toComplex, fromComplex) import Numeric.VariablePrecision.Algorithms (recodeFloat) -import Data.Complex (Complex)+import Data.Complex.Generic (Complex) -- | Convert to a Float from the same precision. toFloat :: F24 -> Float@@ -50,33 +56,55 @@ fromDouble = recodeFloat -- | Convert to a Float from the same precision.-toComplexFloat :: C24 -> Complex Float+toComplexFloat :: CF24 -> Complex Float toComplexFloat = recodeComplex . toComplex -- | Convert from a Float to the same precision.-fromComplexFloat :: Complex Float -> C24+fromComplexFloat :: Complex Float -> CF24 fromComplexFloat = fromComplex . recodeComplex -- | Convert to a Double from the same precision.-toComplexDouble :: C53 -> Complex Double+toComplexDouble :: CF53 -> Complex Double toComplexDouble = recodeComplex . toComplex -- | Convert from a Double to the same precision.-fromComplexDouble :: Complex Double -> C53+fromComplexDouble :: Complex Double -> CF53 fromComplexDouble = fromComplex . recodeComplex -type F8 = VFloat N8 ; f8 :: F8 ; f8 = 0-type F16 = VFloat N16 ; f16 :: F16 ; f16 = 0-type F24 = VFloat N24 ; f24 :: F24 ; f24 = 0-type F32 = VFloat N32 ; f32 :: F32 ; f32 = 0-type F40 = VFloat N40 ; f40 :: F40 ; f40 = 0-type F48 = VFloat N48 ; f48 :: F48 ; f48 = 0-type F53 = VFloat N53 ; f53 :: F53 ; f53 = 0+type F = VFloat+type X = VFixed+type C = VComplex+type CF = C F+type CX = C X -type C8 = VComplex N8 ; c8 :: C8 ; c8 = 0-type C16 = VComplex N16 ; c16 :: C16 ; c16 = 0-type C24 = VComplex N24 ; c24 :: C24 ; c24 = 0-type C32 = VComplex N32 ; c32 :: C32 ; c32 = 0-type C40 = VComplex N40 ; c40 :: C40 ; c40 = 0-type C48 = VComplex N48 ; c48 :: C48 ; c48 = 0-type C53 = VComplex N53 ; c53 :: C53 ; c53 = 0+type F8 = F N8 ; f8 :: F8 ; f8 = 0+type F16 = F N16 ; f16 :: F16 ; f16 = 0+type F24 = F N24 ; f24 :: F24 ; f24 = 0+type F32 = F N32 ; f32 :: F32 ; f32 = 0+type F40 = F N40 ; f40 :: F40 ; f40 = 0+type F48 = F N48 ; f48 :: F48 ; f48 = 0+type F53 = F N53 ; f53 :: F53 ; f53 = 0++type X8 = X N8 ; x8 :: X8 ; x8 = 0+type X16 = X N16 ; x16 :: X16 ; x16 = 0+type X24 = X N24 ; x24 :: X24 ; x24 = 0+type X32 = X N32 ; x32 :: X32 ; x32 = 0+type X40 = X N40 ; x40 :: X40 ; x40 = 0+type X48 = X N48 ; x48 :: X48 ; x48 = 0+type X53 = X N53 ; x53 :: X53 ; x53 = 0++type CF8 = CF N8 ; cf8 :: CF8 ; cf8 = 0+type CF16 = CF N16 ; cf16 :: CF16 ; cf16 = 0+type CF24 = CF N24 ; cf24 :: CF24 ; cf24 = 0+type CF32 = CF N32 ; cf32 :: CF32 ; cf32 = 0+type CF40 = CF N40 ; cf40 :: CF40 ; cf40 = 0+type CF48 = CF N48 ; cf48 :: CF48 ; cf48 = 0+type CF53 = CF N53 ; cf53 :: CF53 ; cf53 = 0++type CX8 = CX N8 ; cx8 :: CX8 ; cx8 = 0+type CX16 = CX N16 ; cx16 :: CX16 ; cx16 = 0+type CX24 = CX N24 ; cx24 :: CX24 ; cx24 = 0+type CX32 = CX N32 ; cx32 :: CX32 ; cx32 = 0+type CX40 = CX N40 ; cx40 :: CX40 ; cx40 = 0+type CX48 = CX N48 ; cx48 :: CX48 ; cx48 = 0+type CX53 = CX N53 ; cx53 :: CX53 ; cx53 = 0
Numeric/VariablePrecision/Complex.hs view
@@ -1,188 +1,245 @@-{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving, Rank2Types #-}+{-# LANGUAGE DeriveDataTypeable, GeneralizedNewtypeDeriving, StandaloneDeriving, FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, Rank2Types, UndecidableInstances #-} {- | Module : Numeric.VariablePrecision.Complex Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable-Portability : DeriveDataTypeable, GeneralizedNewtypeDeriving, Rank2Types+Portability : DeriveDataTypeable, GeneralizedNewtypeDeriving, StandaloneDeriving, FlexibleInstances, FlexibleContexts, MultiParamTypeClasses, Rank2Types, UndecidableInstances -Newtype wrapper around 'Data.Complex'. When both of 'Data.Complex' and-this module need to be imported, use qualified imports.+Complex numbers with variable precision. -} module Numeric.VariablePrecision.Complex- ( VComplex()- , (.+)- , (.*)- , (*.)+ ( module Data.Complex.Generic+ , VComplex() , toComplex , fromComplex , withComplex- , mapComplex , recodeComplex , scaleComplex- , realPart- , imagPart- , conjugate- , magnitude- , magnitude2- , sqr- , phase- , polar- , cis- , mkPolar- , scaleComplex'- , magnitude2'- , sqr'- , DComplex(..)- , toDComplex- , fromDComplex- , withDComplex+ , scaleVComplex+ , toComplexDFloat+ , toComplexDFixed+ , fromComplexDFloat+ , fromComplexDFixed+ , withComplexDFloat+ , withComplexDFixed ) where -import Data.Data (Data())-import Data.Typeable (Typeable())-import qualified Data.Complex as X+import Data.Complex.Generic+import Data.Complex.Generic.Default +import Numeric.VariablePrecision.Fixed import Numeric.VariablePrecision.Float import Numeric.VariablePrecision.Precision import Numeric.VariablePrecision.Algorithms (recodeFloat) --- | Newtype wrapper around 'X.Complex' so that instances can be written+-- | Newtype wrapper around 'Complex' so that instances can be written -- for 'HasPrecision' and 'VariablePrecision'.-newtype VComplex p = FromComplex- { -- | Convert 'VComplex' to 'X.Complex'.- toComplex :: X.Complex (VFloat p)+newtype VComplex t p = FromComplex+ { -- | Convert 'VComplex' to 'Complex'.+ toComplex :: Complex (t p) }- deriving (Eq, Num, Fractional, Floating, Data, Typeable)+ deriving (Eq) --- | Convert 'X.Complex' to 'VComplex'.-fromComplex :: X.Complex (VFloat p) -> VComplex p+deriving instance Num (Complex (t p)) => Num (VComplex t p)+deriving instance Fractional (Complex (t p)) => Fractional (VComplex t p)+deriving instance Floating (Complex (t p)) => Floating (VComplex t p)++-- | Convert 'Complex' to 'VComplex'.+fromComplex :: Complex (t p) -> VComplex t p fromComplex = FromComplex --- | Alike to 'X.:+', constructs a complex number from a real part and--- an imaginary part.-(.+) :: NaturalNumber p => VFloat p -> VFloat p -> VComplex p-x .+ y = fromComplex (x X.:+ y)-infix 6 .++instance NaturalNumber p => Num (Complex (VFloat p)) where+ (+) = addDefault+ (-) = subDefault+ (*) = mulDefault+ negate = negateDefault+ fromInteger = fromIntegerDefault+ abs = absDefault+ signum = signumDefault -instance HasPrecision VComplex+instance NaturalNumber p => Num (Complex (VFixed p)) where+ (+) = addDefault+ (-) = subDefault+ (*) = mulDefault+ negate = negateDefault+ fromInteger = fromIntegerDefault+ abs = error "Num.abs: unimplemented for Complex VFixed"+ signum = error "Num.signum: unimplemented for Complex VFixed" -instance VariablePrecision VComplex where- adjustPrecision = withComplex (mapComplex adjustPrecision)+instance NaturalNumber p => Fractional (Complex (VFloat p)) where+ (/) = divDefaultRF+ fromRational = fromRationalDefault -instance Normed VComplex where- norm1 z = abs (realPart z) + abs (imagPart z)- norm2 = magnitude- norm2Squared = magnitude2- normInfinity z = abs (realPart z) `max` abs (imagPart z)+instance NaturalNumber p => Fractional (Complex (VFixed p)) where+ (/) = divDefault+ fromRational = fromRationalDefault --- | Lift an operation on 'X.Complex' to one on 'VComplex'.-withComplex :: (X.Complex (VFloat p) -> X.Complex (VFloat q)) -> (VComplex p -> VComplex q)-withComplex f = fromComplex . f . toComplex+instance NaturalNumber p => Floating (Complex (VFloat p)) where+ pi = piDefault+ exp = expDefault+ log = logDefault+ sqrt = sqrtDefault+ sin = sinDefault+ cos = cosDefault+ tan = tanDefault+ sinh = sinhDefault+ cosh = coshDefault+ tanh = tanhDefault+ asin = asinDefault+ acos = acosDefault+ atan = atanDefault+ asinh = asinhDefault+ acosh = acoshDefault+ atanh = atanhDefault -instance NaturalNumber p => Show (VComplex p) where- showsPrec p = showsPrec p . toComplex+instance NaturalNumber p => ComplexRect (Complex (VFloat p)) (VFloat p) where+ mkRect x y = (x :+ y)+ rect (x :+ y) = (x, y)+ real = realDefault+ imag = imagDefault+ realPart = realPartDefault+ imagPart = imagPartDefault+ conjugate = conjugateDefault+ magnitudeSquared = magnitudeSquaredDefault+ sqr = sqrDefaultRF+ (.*) = rmulDefault+ (*.) = mulrDefault -instance NaturalNumber p => Read (VComplex p) where- readsPrec p = map (first fromComplex) . readsPrec p- where first f (a, b) = (f a, b)+instance NaturalNumber p => ComplexRect (Complex (VFixed p)) (VFixed p) where+ mkRect x y = (x :+ y)+ rect (x :+ y) = (x, y)+ real = realDefault+ imag = imagDefault+ realPart = realPartDefault+ imagPart = imagPartDefault+ conjugate = conjugateDefault+ magnitudeSquared = magnitudeSquaredDefault+ sqr = sqrDefault -- FIXME+ (.*) = rmulDefault+ (*.) = mulrDefault --- | Unit at phase.-cis :: NaturalNumber p => VFloat p -> VComplex p-cis = fromComplex . X.cis+instance NaturalNumber p => ComplexPolar (Complex (VFloat p)) (VFloat p) where+ mkPolar = mkPolarDefault+ cis = cisDefault+ polar = polarDefault+ magnitude = magnitudeDefaultRF+ phase = phaseDefaultRF --- | From polar form.-mkPolar :: NaturalNumber p => VFloat p -> VFloat p -> VComplex p-mkPolar r t = fromComplex (X.mkPolar r t)+instance NaturalNumber p => ComplexRect (VComplex VFloat p) (VFloat p) where+ mkRect x y = FromComplex (x :+ y)+ rect = rect . toComplex+ real = realDefault+ imag = imagDefault+ realPart = realPartDefault+ imagPart = imagPartDefault+ conjugate = conjugateDefault+ magnitudeSquared = magnitudeSquaredDefault+ sqr = sqrDefaultRF+ (.*) = rmulDefault+ (*.) = mulrDefault --- | Conjugate.-conjugate :: NaturalNumber p => VComplex p -> VComplex p-conjugate = withComplex X.conjugate+instance NaturalNumber p => ComplexRect (VComplex VFixed p) (VFixed p) where+ mkRect x y = FromComplex (x :+ y)+ rect = rect . toComplex+ real = realDefault+ imag = imagDefault+ realPart = realPartDefault+ imagPart = imagPartDefault+ conjugate = conjugateDefault+ magnitudeSquared = magnitudeSquaredDefault+ sqr = sqrDefault -- FIXME+ (.*) = rmulDefault+ (*.) = mulrDefault --- | Imaginary part.-imagPart :: NaturalNumber p => VComplex p -> VFloat p-imagPart = X.imagPart . toComplex+instance NaturalNumber p => ComplexPolar (VComplex VFloat p) (VFloat p) where+ mkPolar = mkPolarDefault+ cis = cisDefault+ polar = polarDefault+ magnitude = magnitudeDefaultRF+ phase = phaseDefaultRF --- | Real part.-realPart :: NaturalNumber p => VComplex p -> VFloat p-realPart = X.realPart . toComplex+instance HasPrecision (VComplex VFloat) --- | Phase.-phase :: NaturalNumber p => VComplex p -> VFloat p-phase = X.phase . toComplex+instance HasPrecision (VComplex VFixed) --- | Polar form.-polar :: NaturalNumber p => VComplex p -> (VFloat p, VFloat p)-polar = X.polar . toComplex+instance VariablePrecision (VComplex VFloat) where+ adjustPrecision = withComplex (fmap adjustPrecision) --- | Magnitude.-magnitude :: NaturalNumber p => VComplex p -> VFloat p-magnitude = X.magnitude . toComplex+instance VariablePrecision (VComplex VFixed) where+ adjustPrecision = withComplex (fmap adjustPrecision) --- | Magnitude squared.-magnitude2 :: NaturalNumber p => VComplex p -> VFloat p-magnitude2 = magnitude2' . toComplex+instance Normed (VComplex VFloat) where+ norm1 z = abs (realPart z) + abs (imagPart z)+ norm2 = magnitude+ norm2Squared = magnitudeSquared+ normInfinity z = abs (realPart z) `max` abs (imagPart z) --- | Apply a function to both components of a complex number.-mapComplex :: (RealFloat a, RealFloat b) => (a -> b) -> X.Complex a -> X.Complex b-mapComplex f (x X.:+ y) = f x X.:+ f y+instance NaturalNumber p => Show (VComplex VFloat p) where+ showsPrec p = showsPrec p . toComplex --- | Much like 'mapComplex' 'recodeFloat'.-recodeComplex :: (RealFloat a, RealFloat b) => X.Complex a -> X.Complex b-recodeComplex = mapComplex recodeFloat+instance NaturalNumber p => Show (VComplex VFixed p) where+ showsPrec p = showsPrec p . toComplex --- | Magnitude squared.-magnitude2' :: RealFloat r => X.Complex r -> r-magnitude2' (x X.:+ y) = x * x + y * y+instance NaturalNumber p => Read (VComplex VFloat p) where+ readsPrec p = map (first fromComplex) . readsPrec p+ where first f (a, b) = (f a, b) --- | Complex square.-sqr :: NaturalNumber p => VComplex p -> VComplex p-sqr = withComplex sqr'+instance NaturalNumber p => Read (VComplex VFixed p) where+ readsPrec p = map (first fromComplex) . readsPrec p+ where first f (a, b) = (f a, b) --- | Complex square.-sqr' :: RealFloat r => X.Complex r -> X.Complex r-sqr' (x X.:+ y) = (x + y) * (x - y) X.:+ scaleFloat 1 (x * y)+-- | Lift an operation on 'X.Complex' to one on 'VComplex'.+withComplex :: (Complex (t p) -> Complex (t q)) -> (VComplex t p -> VComplex t q)+withComplex f = fromComplex . f . toComplex +-- | Much like 'mapComplex' 'recodeFloat'.+recodeComplex :: (RealFloat a, RealFloat b) => Complex a -> Complex b+recodeComplex = fmap recodeFloat+ -- | Much like 'withComplex' 'scaleComplex''.-scaleComplex :: NaturalNumber p => Int -> VComplex p -> VComplex p-scaleComplex = withComplex . scaleComplex'+scaleVComplex :: NaturalNumber p => Int -> VComplex VFloat p -> VComplex VFloat p+scaleVComplex = withComplex . scaleComplex -- | Much like 'mapComplex' 'scaleFloat'.-scaleComplex' :: RealFloat r => Int -> X.Complex r -> X.Complex r-scaleComplex' = mapComplex . scaleFloat---- | Real-complex multiplication.-(.*) :: NaturalNumber p => VFloat p -> VComplex p -> VComplex p-x .* y = withComplex (mapComplex (x *)) y-infixl 7 .*+scaleComplex :: RealFloat r => Int -> Complex r -> Complex r+scaleComplex = fmap . scaleFloat --- | Complex-real multiplication.-(*.) :: NaturalNumber p => VComplex p -> VFloat p -> VComplex p-x *. y = withComplex (mapComplex (* y)) x-infixl 7 *.+-- | Freeze a 'VComplex VFloat'.+toComplexDFloat :: NaturalNumber p => VComplex VFloat p -> Complex DFloat+toComplexDFloat = fmap toDFloat . toComplex +-- | Freeze a 'VComplex VFixed'.+toComplexDFixed :: NaturalNumber p => VComplex VFixed p -> Complex DFixed+toComplexDFixed = fmap toDFixed . toComplex --- | A concrete format suitable for storage or wire transmission.-data DComplex = DComplex{ dRealPart :: !DFloat, dImagPart :: !DFloat }- deriving (Eq, Ord, Read, Show, Data, Typeable)+-- | Thaw a 'Complex DFloat'. Results in 'Nothing' on precision mismatch.+fromComplexDFloat :: NaturalNumber p => Complex DFloat -> Maybe (VComplex VFloat p)+fromComplexDFloat (x :+ y) = do+ r <- fromDFloat x+ i <- fromDFloat y+ return (r .+ i) --- | Freeze a 'VComplex'.-toDComplex :: NaturalNumber p => VComplex p -> DComplex-toDComplex v = DComplex (toDFloat (realPart v)) (toDFloat (imagPart v))+-- | Thaw a 'Complex DFixed'. Results in 'Nothing' on precision mismatch.+fromComplexDFixed :: NaturalNumber p => Complex DFixed -> Maybe (VComplex VFixed p)+fromComplexDFixed (x :+ y) = do+ r <- fromDFixed x+ i <- fromDFixed y+ return (r .+ i) --- | Thaw a 'DComplex'. Results in 'Nothing' on precision mismatch.-fromDComplex :: NaturalNumber p => DComplex -> Maybe (VComplex p)-fromDComplex d = do- r <- fromDFloat (dRealPart d)- i <- fromDFloat (dImagPart d)+-- | Thaw a 'Complex DFloat' to its natural precision. 'Nothing' is passed on+-- precision mismatch between real and imaginary parts.+withComplexDFloat :: Complex DFloat -> (forall p . NaturalNumber p => Maybe (VComplex VFloat p) -> r) -> r+withComplexDFloat (x :+ y) f = withDFloat x $ \r -> f $ do+ i <- fromDFloat y return (r .+ i) --- | Thaw a 'DComplex' to its natural precision. 'Nothing' is passed on+-- | Thaw a 'Complex DFixed' to its natural precision. 'Nothing' is passed on -- precision mismatch between real and imaginary parts.-withDComplex :: DComplex -> (forall p . NaturalNumber p => Maybe (VComplex p) -> r) -> r-withDComplex d f = withDFloat (dRealPart d) $ \r -> f $ do- i <- fromDFloat (dImagPart d)+withComplexDFixed :: Complex DFixed -> (forall p . NaturalNumber p => Maybe (VComplex VFixed p) -> r) -> r+withComplexDFixed (x :+ y) f = withDFixed x $ \r -> f $ do+ i <- fromDFixed y return (r .+ i)
Numeric/VariablePrecision/Fixed.hs view
@@ -4,7 +4,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : BangPatterns, DeriveDataTypeable, Rank2Types, MonoLocalBinds @@ -90,7 +90,10 @@ l@(F x) * F y = F $ (x * y) `shiftR` fromIntegral (precision l) negate (F x) = F (negate x) abs (F x) = F (abs x)- signum (F x) = F (signum x)+ signum (F x)+ | x > 0 = 1+ | x < 0 = -1+ | otherwise = 0 fromInteger x = let r = F (x `shiftL` fromIntegral (precision r)) in r
Numeric/VariablePrecision/Float.hs view
@@ -4,7 +4,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : BangPatterns, DeriveDataTypeable, Rank2Types
Numeric/VariablePrecision/Precision.hs view
@@ -3,7 +3,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : portable
Numeric/VariablePrecision/Precision/Reify.hs view
@@ -4,7 +4,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : unstable Portability : Rank2Types
TypeLevel/NaturalNumber/ExtraNumbers.hs view
@@ -3,7 +3,7 @@ Copyright : (c) Claude Heiland-Allen 2012 License : BSD3 -Maintainer : claudiusmaximus@goto10.org+Maintainer : claude@mathr.co.uk Stability : stable Portability : portable
variable-precision.cabal view
@@ -1,5 +1,5 @@ Name: variable-precision-Version: 0.2.1+Version: 0.3.1 Synopsis: variable-precision floating point Description: Software floating point with type-tagged variable mantissa precision,@@ -20,7 +20,7 @@ License: BSD3 License-file: LICENSE Author: Claude Heiland-Allen-Maintainer: claudiusmaximus@goto10.org+Maintainer: claude@mathr.co.uk Copyright: (c) 2012 Claude Heiland-Allen Category: Math Build-type: Simple@@ -54,6 +54,7 @@ Numeric.VariablePrecision.Integer.Logarithm Build-depends: base >= 3 && < 6,+ complex-generic >= 0.1.1 && < 0.2, floatshow >= 0.2 && < 0.3, type-level-natural-number >= 1 && < 2 if (!flag(fast))@@ -71,4 +72,4 @@ source-repository this type: git location: git://gitorious.org/variable-precision/variable-precision.git- tag: v0.2.1+ tag: v0.3.1