summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojciech A. Koszek <wkoszek@FreeBSD.org>2006-02-23 20:46:10 +0000
committerWojciech A. Koszek <wkoszek@FreeBSD.org>2006-02-23 20:46:10 +0000
commitd2f4defee20c19d4b401dd47c3f23ff57beed33e (patch)
treee2c424b0825f6726275b21b45f381431eb288eb0
parent28baad63bd27f9fce34b031e5bc05b9d003620ab (diff)
Notes
-rw-r--r--tools/tools/ministat/ministat.c25
-rw-r--r--usr.bin/ministat/ministat.c25
2 files changed, 36 insertions, 14 deletions
diff --git a/tools/tools/ministat/ministat.c b/tools/tools/ministat/ministat.c
index 038ef6b5acfe..af3f803b88d6 100644
--- a/tools/tools/ministat/ministat.c
+++ b/tools/tools/ministat/ministat.c
@@ -202,15 +202,26 @@ Avg(struct dataset *ds)
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
diff --git a/usr.bin/ministat/ministat.c b/usr.bin/ministat/ministat.c
index 038ef6b5acfe..af3f803b88d6 100644
--- a/usr.bin/ministat/ministat.c
+++ b/usr.bin/ministat/ministat.c
@@ -202,15 +202,26 @@ Avg(struct dataset *ds)
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