Median calculated in current version of 'ministat' utility isn't correct. It works properly is a data source contains odd number of data points. If the data source holds even number of data points, value is wrong. It should be calculated by adding two middle elements and dividing them by 2. -- Wojciech A. Koszek dunstan@FreeBSD.czest.pl --- ministat.c.orig Sat Feb 4 21:34:54 2006 +++ ministat.c Sun Feb 5 01:07:06 2006 @@ -200,15 +200,26 @@ static double Median(struct dataset *ds) { - int i; - struct point *pp; + int even, i; + struct point *p1, *p2; - i = ds->n / 2; - TAILQ_FOREACH(pp, &ds->list, list) { - if (i--) - continue; - return (pp->val); + if ((ds->n % 2) == 1) { + i = (ds->n / 2) + 1; + even = 0; + } else { + i = ds->n / 2; + even = 1; } + TAILQ_FOREACH(p1, &ds->list, list) { + --i; + if (i == 0) + break; + } + if (even) { + p2 = TAILQ_NEXT(p1, list); + return ((p2->val + p1->val) / 2); + } + return (p1->val); } static double