///|
pub fn trimmed_mean(data : Array[Double], trim_percent : Double) -> Double {
if data.length() == 0 {
return 0.0
}
if trim_percent < 0.0 || trim_percent >= 0.5 {
abort("trim_percent must be in [0, 0.5)")
}
let sorted = []
for v in data {
sorted.push(v)
}
sorted.sort()
let n = sorted.length()
let k = (n.to_double() * trim_percent).to_int()
if k * 2 >= n {
return 0.0
}
let mut sum = 0.0
for i = k; i < n - k; i = i + 1 {
sum += sorted[i]
}
sum / (n - 2 * k).to_double()
}