trimmedMean function
Trimmed mean: drop trim fraction from each tail (0..0.5), then average.
Implementation
double trimmedMean(List<num> values, double trim) {
if (values.isEmpty) return double.nan;
if (trim <= 0) {
return values.fold<double>(0, (double s, num v) => s + v.toDouble()) / values.length;
}
final List<num> sorted = List<num>.of(values)..sort();
final int k = (sorted.length * trim.clamp(0.0, 0.5)).round();
final int start = k;
final int end = sorted.length - k;
if (start >= end) return double.nan;
double sum = 0;
for (int i = start; i < end; i++) {
sum += sorted[i].toDouble();
}
return sum / (end - start);
}