///|
/// Calculates the sum of an array of doubles.
pub fn sum(arr : Array[Double]) -> Double {
let mut s = 0.0
for val in arr {
s += val
}
s
}
///|
/// Calculates the mean of an array of doubles.
pub fn mean(arr : Array[Double]) -> Double {
if arr.length() == 0 {
return 0.0
}
sum(arr) / arr.length().to_double()
}
///|
/// Calculates the variance of an array of doubles.
pub fn variance(arr : Array[Double], sample? : Bool = true) -> Double {
let n = arr.length()
if n <= 1 {
return 0.0
}
let m = mean(arr)
let mut sum_sq = 0.0
for val in arr {
let diff = val - m
sum_sq += diff * diff
}
let denominator = if sample { n - 1 } else { n }
sum_sq / denominator.to_double()
}
///|
/// Calculates the standard deviation of an array of doubles.
pub fn std_dev(arr : Array[Double], sample? : Bool = true) -> Double {
let v = variance(arr, sample~)
v.sqrt()
}