packages feed

uniqueness-periods-vector-stats 0.1.0.0 → 0.1.1.0

raw patch · 3 files changed

+8/−21 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Numeric.Stats: sumNeumaier :: RealFrac a => [a] -> a -> a -> a
- Numeric.Stats: sumNeumaierF :: [Float] -> Float# -> Float# -> Float
- Numeric.Stats: sum_NF :: [Float] -> Float

Files

ChangeLog.md view
@@ -3,3 +3,8 @@ ## 0.1.0.0 -- 2020-09-19  * First version. Released on an unsuspecting world.++## 0.1.1.0 -- 2020-09-19++* First version revised. Fixed issues with not importing from GHC.Prim fabsFloat# for GHC lower than 8.2* versions. Removed functions that used Neumaier summation because+they do not have the intended behaviour. 
Numeric/Stats.hs view
@@ -14,24 +14,6 @@ import GHC.Exts import GHC.Prim --- | Inspired by: https://www.mat.univie.ac.at/~neum/scan/01.pdf-sumNeumaierF :: [Float] -> Float# -> Float# -> Float-sumNeumaierF ((F# !x):xs) !c !sum1 = sumNeumaierF xs c1 t- where { !c1 = if I# (geFloat# (fabsFloat# sum1) (fabsFloat# x)) == 1 then plusFloat# (plusFloat# c (minusFloat# sum1 t)) x else plusFloat# (plusFloat# c (minusFloat# x t)) sum1 ; !t = plusFloat# sum1 x }-sumNeumaierF _ c sum1 = F# (plusFloat# sum1 c)---- | Inspired by: https://www.mat.univie.ac.at/~neum/scan/01.pdf--- Looks like that it does not work for Haskell GHC (may be the compiler uses associativity rules to add numbers) as expected, the floating-point arithmetic --- cancellation errors grows just like for the usual 'sum'.-sumNeumaier :: RealFrac a => [a] -> a -> a -> a-sumNeumaier (!x:xs) !c !sum1 = sumNeumaier xs c1 t- where { !c1 = if abs sum1 >= abs x then c + (sum1 - t) + x else c + (x - t) + sum1 ; !t = sum1 + x }-sumNeumaier _ c sum = sum + c--sum_NF :: [Float] -> Float-sum_NF xs = sumNeumaierF xs 0.0# 0.0#-{-# INLINE sum_NF #-}- -- | A tail-recursive realization for the statistic mean.  mean2 :: RealFrac a => [a] -> a -> a -> a -> a mean2 (x:xs) !s1 !l1 _ = mean2 xs (s1 + x) (l1 + 1) ((s1 + x) / (l1 + 1))@@ -44,12 +26,12 @@  -- | One-pass and tail-recursive realization for the pair of the mean and dispersion. Is vulnerable to the floating-point cancellation errors.  meanWithDispersion :: (RealFrac a, Floating a) => [a] -> a -> a -> a -> a -> a -> (a,a)-meanWithDispersion (!x:xs) !s1 !s2 !l1 !m1 !d = meanWithDispersion xs (s1 + x) (s2 + x**2) (l1 + 1) (m0 s1 l1 x) (m0 s2 l1 (x**2) - (m0 s1 l1 x)**2)+meanWithDispersion (!x:xs) !s1 !s2 !l1 m1 d = meanWithDispersion xs (s1 + x) (s2 + x*x) (l1 + 1) (m0 s1 l1 x) (m0 s2 l1 (x*x) - (m0 s1 l1 x)**2)   where m0 !s3 !l2 !x = (s3 + x) / (l2 + 1) meanWithDispersion _ _ _ _ !m !d = (m,d)  meanWithDispersionF :: [Float] -> Float# -> Float# -> Float# -> Float# -> Float# -> (Float,Float)-meanWithDispersionF ((F# !x):xs) !s1 !s2 !l1 !m1 !d = +meanWithDispersionF ((F# !x):xs) !s1 !s2 !l1 m1 d =   meanWithDispersionF xs (plusFloat# s1 x) (plusFloat# s2 (powerFloat# x 2.0#)) (plusFloat# l1 1.0#) (m0 s1 l1 x)     (m0 s2 l1 (minusFloat# (powerFloat# x 2.0#) (powerFloat# (m0 s1 l1 x) 2.0#)))       where m0 !s3 !l2 !x = (divideFloat# (plusFloat# s3 x) (plusFloat# l2 1.0#))
uniqueness-periods-vector-stats.cabal view
@@ -2,7 +2,7 @@ -- For further documentation, see http://haskell.org/cabal/users-guide/  name:                uniqueness-periods-vector-stats-version:             0.1.0.0+version:             0.1.1.0 synopsis:            A very basic descriptive statistics. description:         A very basic descriptive statistics. Functions use a tail recursion approach to compute the values and are strict by an accumulator. homepage:            https://hackage.haskell.org/package/uniqueness-periods-vector-stats