///|
pub fn median(data : Array[Double]) -> Double {
if data.length() == 0 {
return 0.0
}
let sorted = []
for v in data {
sorted.push(v)
}
sorted.sort()
let n = sorted.length()
if n % 2 == 1 {
sorted[n / 2]
} else {
(sorted[n / 2 - 1] + sorted[n / 2]) / 2.0
}
}
///|
pub fn mad(data : Array[Double]) -> Double {
if data.length() == 0 {
return 0.0
}
let med = median(data)
let devs = []
for v in data {
let mut diff = v - med
if diff < 0.0 {
diff = -diff
}
devs.push(diff)
}
median(devs) * 1.4826
}