X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fpercentiles.h;h=c79a629fe3623de7b531186ec6ef09dec6e9d329;hb=b9f712f8911170fcc049c6d7d83b6887185de4dd;hp=d1271fa2acb5e573e3166dad99eeeddaf688f167;hpb=5d9d2b2ae7d49240f3438e4f3c40ac1f276e31fb;p=pspp diff --git a/src/math/percentiles.h b/src/math/percentiles.h index d1271fa2ac..c79a629fe3 100644 --- a/src/math/percentiles.h +++ b/src/math/percentiles.h @@ -1,83 +1,64 @@ -/* PSPP - A program for statistical analysis . -*-c-*- +/* PSPP - a program for statistical analysis. + Copyright (C) 2004, 2008, 2009 Free Software Foundation, Inc. -Copyright (C) 2004 Free Software Foundation, Inc. -Author: John Darrington 2004 + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ +#ifndef __PERCENTILES_H__ +#define __PERCENTILES_H__ -#ifndef PERCENTILES_H -#define PERCENTILES_H +#include +#include "order-stats.h" -#include +/* To calculate a percentile: -struct weighted_value ; + - Create a "struct percentile" with percentile_create(). + - Feed in the data with order_stats_accumulate() or + order_stats_accumulate_idx(). The data must be in sorted order: if + necessary, use one of the sorting functions from sort.h to sort them. + - Obtain the percentile with percentile_calculate(). + - Destroy the data structure with statistic_destroy(). +*/ /* The algorithm used to calculate percentiles */ enum pc_alg { - PC_NONE=0, - PC_HAVERAGE, - PC_WAVERAGE, - PC_ROUND, - PC_EMPIRICAL, + PC_NONE=0, + PC_HAVERAGE, + PC_WAVERAGE, + PC_ROUND, + PC_EMPIRICAL, PC_AEMPIRICAL } ; +struct percentile +{ + struct order_stats parent; + double ptile; + double w; -extern const char *const ptile_alg_desc[]; - - - + /* Mutable */ + double g1; + double g1_star; -struct percentile { + double g2; + double g2_star; - /* The break point of the percentile */ - double p; - - /* The value of the percentile */ - double v; + struct k k[2]; }; +struct percentile *percentile_create (double p, double W); +double percentile_calculate (const struct percentile *, enum pc_alg); -/* Calculate the percentiles of the break points in pc_bp, - placing the values in pc_val. - wv is a sorted array of weighted values of the data set. -*/ -void ptiles(struct hsh_table *pc_hash, - const struct weighted_value **wv, - int n_data, - double w, - enum pc_alg algorithm); - - -/* Calculate Tukey's Hinges and the Whiskers for the box plot*/ -void tukey_hinges(const struct weighted_value **wv, - int n_data, - double w, - double hinges[3]); - - - -/* Hash utility functions */ -int ptile_compare(const struct percentile *p1, - const struct percentile *p2, - void *aux); - -unsigned ptile_hash(const struct percentile *p, void *aux); - - -#endif +#endif /* percentiles.h */