parry3d/utils/median.rs
1use crate::math::Real;
2use na;
3
4/// Computes the median of a set of values.
5#[inline]
6pub fn median(vals: &mut [Real]) -> Real {
7 assert!(
8 !vals.is_empty(),
9 "Cannot compute the median of zero values."
10 );
11
12 vals.sort_by(|a, b| a.partial_cmp(b).unwrap());
13
14 let n = vals.len();
15
16 if n % 2 == 0 {
17 (vals[n / 2 - 1] + vals[n / 2]) / na::convert::<f64, Real>(2.0)
18 } else {
19 vals[n / 2]
20 }
21}