{-# LANGUAGE BangPatterns, MagicHash #-}
module Numeric.Stats where
import GHC.Exts
import GHC.Prim
mean2F :: [Float] -> Float# -> Int# -> Float
mean2F :: [Float] -> Float# -> Int# -> Float
mean2F ((F# !Float#
x):[Float]
xs) !Float#
s1 !Int#
l1 = [Float] -> Float# -> Int# -> Float
mean2F [Float]
xs (Float# -> Float# -> Float#
plusFloat# Float#
s1 Float#
x) (Int#
l1 Int# -> Int# -> Int#
+# Int#
1#)
mean2F [Float]
_ !Float#
s1 !Int#
l1 =
case Int# -> Int
I# Int#
l1 of
Int
0 -> [Char] -> Float
forall a. HasCallStack => [Char] -> a
error [Char]
"Not defined for the third zero argument. "
Int
_ -> Float# -> Float
F# Float#
m
where !m :: Float#
m = Float# -> Float# -> Float#
divideFloat# Float#
s1 (Int# -> Float#
int2Float# Int#
l1)
mean2D :: [Double] -> Double# -> Int# -> Double
mean2D :: [Double] -> Double# -> Int# -> Double
mean2D ((D# !Double#
x):[Double]
xs) !Double#
s1 !Int#
l1 = [Double] -> Double# -> Int# -> Double
mean2D [Double]
xs (Double#
s1 Double# -> Double# -> Double#
+## Double#
x) (Int#
l1 Int# -> Int# -> Int#
+# Int#
1#)
mean2D [Double]
_ !Double#
s1 !Int#
l1 =
case Int# -> Int
I# Int#
l1 of
Int
0 -> [Char] -> Double
forall a. HasCallStack => [Char] -> a
error [Char]
"Not defined for the third zero argument. "
Int
_ -> Double# -> Double
D# Double#
m
where !m :: Double#
m = Double#
s1 Double# -> Double# -> Double#
/## Int# -> Double#
int2Double# Int#
l1
meanWithDispersion :: (RealFrac a, Floating a) => [a] -> a -> a -> a -> a -> a -> (a,a)
meanWithDispersion :: [a] -> a -> a -> a -> a -> a -> (a, a)
meanWithDispersion (!a
x:[a]
xs) !a
s1 !a
s2 !a
l1 a
m1 a
d = [a] -> a -> a -> a -> a -> a -> (a, a)
forall a.
(RealFrac a, Floating a) =>
[a] -> a -> a -> a -> a -> a -> (a, a)
meanWithDispersion [a]
xs (a
s1 a -> a -> a
forall a. Num a => a -> a -> a
+ a
x) (a
s2 a -> a -> a
forall a. Num a => a -> a -> a
+ a
xa -> a -> a
forall a. Num a => a -> a -> a
*a
x) (a
l1 a -> a -> a
forall a. Num a => a -> a -> a
+ a
1) (a -> a -> a -> a
forall a. Fractional a => a -> a -> a -> a
m0 a
s1 a
l1 a
x) (a -> a -> a -> a
forall a. Fractional a => a -> a -> a -> a
m0 a
s2 a
l1 (a
xa -> a -> a
forall a. Num a => a -> a -> a
*a
x) a -> a -> a
forall a. Num a => a -> a -> a
- (a -> a -> a -> a
forall a. Fractional a => a -> a -> a -> a
m0 a
s1 a
l1 a
x)a -> a -> a
forall a. Floating a => a -> a -> a
**a
2)
where m0 :: a -> a -> a -> a
m0 !a
s3 !a
l2 !a
x = (a
s3 a -> a -> a
forall a. Num a => a -> a -> a
+ a
x) a -> a -> a
forall a. Fractional a => a -> a -> a
/ (a
l2 a -> a -> a
forall a. Num a => a -> a -> a
+ a
1)
meanWithDispersion [a]
_ a
_ a
_ a
_ !a
m !a
d = (a
m,a
d)
meanWithDispersionF :: [Float] -> Float# -> Float# -> Int# -> (Float,Float)
meanWithDispersionF :: [Float] -> Float# -> Float# -> Int# -> (Float, Float)
meanWithDispersionF ((F# !Float#
x):[Float]
xs) !Float#
s1 !Float#
s2 !Int#
l1 = [Float] -> Float# -> Float# -> Int# -> (Float, Float)
meanWithDispersionF [Float]
xs (Float# -> Float# -> Float#
plusFloat# Float#
s1 Float#
x) (Float# -> Float# -> Float#
plusFloat# Float#
s2 (Float# -> Float# -> Float#
timesFloat# Float#
x Float#
x)) (Int#
l1 Int# -> Int# -> Int#
+# Int#
1#)
meanWithDispersionF [] !Float#
s1 !Float#
s2 !Int#
l1 = (Float# -> Float
F# Float#
m, Float# -> Float
F# (Float# -> Float# -> Float#
minusFloat# (Float# -> Float# -> Float#
divideFloat# Float#
s2 (Int# -> Float#
int2Float# Int#
l1)) (Float# -> Float# -> Float#
timesFloat# Float#
m Float#
m)))
where !m :: Float#
m = Float# -> Float# -> Float#
divideFloat# Float#
s1 (Int# -> Float#
int2Float# Int#
l1)
meanWithDispersionD :: [Double] -> Double# -> Double# -> Int# -> (Double,Double)
meanWithDispersionD :: [Double] -> Double# -> Double# -> Int# -> (Double, Double)
meanWithDispersionD ((D# !Double#
x):[Double]
xs) !Double#
s1 !Double#
s2 !Int#
l1 = [Double] -> Double# -> Double# -> Int# -> (Double, Double)
meanWithDispersionD [Double]
xs (Double#
s1 Double# -> Double# -> Double#
+## Double#
x) (Double#
s2 Double# -> Double# -> Double#
+## (Double#
x Double# -> Double# -> Double#
*## Double#
x)) (Int#
l1 Int# -> Int# -> Int#
+# Int#
1#)
meanWithDispersionD [] !Double#
s1 !Double#
s2 !Int#
l1 = (Double# -> Double
D# Double#
m, Double# -> Double
D# ((Double#
s2 Double# -> Double# -> Double#
/## Int# -> Double#
int2Double# Int#
l1) Double# -> Double# -> Double#
-## (Double#
m Double# -> Double# -> Double#
*## Double#
m)))
where !m :: Double#
m = Double#
s1 Double# -> Double# -> Double#
/## Int# -> Double#
int2Double# Int#
l1
meanF :: [Float] -> Float
meanF :: [Float] -> Float
meanF [Float]
xs = [Float] -> Float# -> Int# -> Float
mean2F [Float]
xs Float#
0.0# Int#
0#
{-# INLINE meanF #-}
meanD :: [Double] -> Double
meanD :: [Double] -> Double
meanD [Double]
xs = [Double] -> Double# -> Int# -> Double
mean2D [Double]
xs Double#
0.0## Int#
0#
meanWithDisp :: (RealFrac a, Floating a) => [a] -> (a,a)
meanWithDisp :: [a] -> (a, a)
meanWithDisp [a]
xs
| [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [a]
xs = [Char] -> (a, a)
forall a. HasCallStack => [Char] -> a
error [Char]
"Not defined for the empty list. "
| Bool
otherwise = [a] -> a -> a -> a -> a -> a -> (a, a)
forall a.
(RealFrac a, Floating a) =>
[a] -> a -> a -> a -> a -> a -> (a, a)
meanWithDispersion [a]
xs a
0.0 a
0.0 a
0.0 a
0.0 a
0.0
{-# RULES "realfroc/float" meanWithDisp = meanWithDispF2 #-}
{-# RULES "realfroc/double" meanWithDisp = meanWithDispD2 #-}
{-# INLINE[2] meanWithDisp #-}
meanWithDispF2 :: [Float] -> (Float,Float)
meanWithDispF2 :: [Float] -> (Float, Float)
meanWithDispF2 [Float]
xs
| [Float] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Float]
xs = [Char] -> (Float, Float)
forall a. HasCallStack => [Char] -> a
error [Char]
"Not defined for the empty list. "
| Bool
otherwise = [Float] -> Float# -> Float# -> Int# -> (Float, Float)
meanWithDispersionF [Float]
xs Float#
0.0# Float#
0.0# Int#
0#
{-# INLINE meanWithDispF2 #-}
meanWithDispD2 :: [Double] -> (Double,Double)
meanWithDispD2 :: [Double] -> (Double, Double)
meanWithDispD2 [Double]
xs
| [Double] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Double]
xs = [Char] -> (Double, Double)
forall a. HasCallStack => [Char] -> a
error [Char]
"Not defined for the empty list. "
| Bool
otherwise = [Double] -> Double# -> Double# -> Int# -> (Double, Double)
meanWithDispersionD [Double]
xs Double#
0.0## Double#
0.0## Int#
0#
{-# INLINE meanWithDispD2 #-}