median function
Median of values (assumes non-empty; sorts a copy).
Implementation
double median(List<num> values) {
if (values.isEmpty) return double.nan;
final List<num> sorted = List<num>.of(values)..sort();
final int n = sorted.length;
if (n.isOdd) return sorted[n ~/ 2].toDouble();
return (sorted[n ~/ 2 - 1] + sorted[n ~/ 2]) / 2;
}