/** * Sample median * @param numbers List of number * @return Sample median, if table was empty or null then Double.NaN is returned. */ public static double median(CancellationToken token, params double[] numbers) { if (numbers == null) { return(Double.NaN); } if (numbers.Length == 0) { return(Double.NaN); } if (numbers.Length == 1) { return(numbers[0]); } if (numbers.Length == 2) { return((numbers[0] + numbers[1]) / 2.0); } foreach (double v in numbers) { if (mXparser.isCurrentCalculationCancelled(token)) { return(Double.NaN); } if (Double.IsNaN(v)) { return(Double.NaN); } } NumberTheory.sortAsc(token, numbers); if ((numbers.Length % 2) == 1) { int i = (numbers.Length - 1) / 2; return(numbers[i]); } else { int i = (numbers.Length / 2) - 1; return((numbers[i] + numbers[i + 1]) / 2.0); } }
/** * Sample median * @param numbers List of number * @return Sample median, if table was empty or null then Double.NaN is returned. */ public static double median(params double[] numbers) { if (numbers == null) { return(Double.NaN); } if (numbers.Length == 0) { return(Double.NaN); } if (numbers.Length == 1) { return(numbers[0]); } if (numbers.Length == 2) { return((numbers[0] + numbers[1]) / 2.0); } foreach (double v in numbers) { if (Double.IsNaN(v)) { return(Double.NaN); } } NumberTheory.sortAsc(numbers); if ((numbers.Length % 2) == 1) { int i = (numbers.Length - 1) / 2; return(numbers[i]); } else { int i = (numbers.Length / 2) - 1; return((numbers[i] + numbers[i + 1]) / 2.0); } }