Fixed bug #22073
[pspp] / src / math / percentiles.h
1 /* PSPP - a program for statistical analysis.
2    Copyright (C) 2004 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation, either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
16
17 #ifndef PERCENTILES_H
18 #define PERCENTILES_H
19
20
21 #include <libpspp/hash.h>
22
23 struct weighted_value ;
24
25 /* The algorithm used to calculate percentiles */
26 enum pc_alg {
27   PC_NONE=0,
28   PC_HAVERAGE,
29   PC_WAVERAGE,
30   PC_ROUND,
31   PC_EMPIRICAL,
32   PC_AEMPIRICAL
33 } ;
34
35
36
37 extern  const char *const ptile_alg_desc[];
38
39
40
41
42 struct percentile {
43
44   /* The break point of the percentile */
45   double p;
46
47   /* The value of the percentile */
48   double v;
49 };
50
51
52 /* Calculate the percentiles of the break points in pc_bp,
53    placing the values in pc_val.
54    wv is  a sorted array of weighted values of the data set.
55 */
56 void ptiles(struct hsh_table *pc_hash,
57             const struct weighted_value **wv,
58             int n_data,
59             double w,
60             enum pc_alg algorithm);
61
62
63 /* Calculate Tukey's Hinges and the Whiskers for the box plot*/
64 void tukey_hinges(const struct weighted_value **wv,
65                   int n_data,
66                   double w,
67                   double hinges[3]);
68
69
70
71 /* Hash utility functions */
72 int ptile_compare(const struct percentile *p1,
73                    const struct percentile *p2,
74                    void *aux);
75
76 unsigned ptile_hash(const struct percentile *p, void *aux);
77
78
79 #endif