TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcmodel
median.c
Go to the documentation of this file.
1
5
/******************************************************************************/
6
#include "
libtpcmodel.h
"
7
/******************************************************************************/
8
9
/******************************************************************************/
15
double
d_kth_smallest
(
17
double
*data,
19
int
n,
21
int
k
22
) {
23
int
i, j, l, m;
24
double
x, s;
25
26
l=0; m=n-1;
27
while
(l<m) {
28
x=data[k]; i=l; j=m;
29
do
{
30
while
(data[i]<x) i++;
31
while
(x<data[j]) j--;
32
if
(i<=j) {s=data[i]; data[i]=data[j]; data[j]=s; i++; j--;}
33
}
while
(i<=j);
34
if
(j<k) l=i;
35
if
(k<i) m=j;
36
}
37
return
(data[k]);
38
}
39
/******************************************************************************/
40
41
/******************************************************************************/
48
double
dmedian
(
50
double
*data,
52
int
n
53
) {
54
int
k;
55
double
d1, d2;
56
57
if
(n<1)
return
(0.0);
58
if
(n%2) {
59
k=(n-1)/2;
return
(
d_kth_smallest
(data, n, k));
60
}
else
{
61
k=n/2; d1=
d_kth_smallest
(data, n, k-1); d2=
d_kth_smallest
(data, n, k);
62
return
(0.5*(d1+d2));
63
}
64
}
65
/******************************************************************************/
66
67
/******************************************************************************/
73
double
dmean
(
75
double
*data,
77
int
n,
79
double
*sd
80
) {
81
int
i;
82
double
sumsqr=0.0, sqrsum=0.0, avg;
83
84
if
(n<1 || data==NULL) {
if
(sd!=NULL) *sd=0.0;
return
(0.0);}
85
86
for
(i=0; i<n; i++) {sumsqr+=data[i]*data[i]; sqrsum+=data[i];}
87
avg=sqrsum/(double)n;
if
(sd==NULL)
return
(avg);
88
if
(n==1) {
89
*sd=0.0;
90
}
else
{
91
sqrsum*=sqrsum;
92
*sd=sqrt( (sumsqr - sqrsum/(
double
)n) / (
double
)(n-1) );
93
}
94
return
(avg);
95
}
96
/******************************************************************************/
97
98
/******************************************************************************/
104
double
dmean_nan
(
106
double
*data,
108
int
n,
110
double
*sd,
113
int
*vn
114
) {
115
int
i, m;
116
double
sumsqr=0.0, sqrsum=0.0, avg;
117
118
if
(n<1 || data==NULL) {
119
if
(sd!=NULL) *sd=0.0;
120
if
(vn!=NULL) *vn=0;
121
return
(0.0);
122
}
123
for
(i=m=0; i<n; i++)
if
(!isnan(data[i])) m++;
124
if
(vn!=NULL) *vn=m;
125
if
(m<1) {
126
if
(sd!=NULL) *sd=nan(
""
);
127
return
(nan(
""
));
128
}
129
130
131
for
(i=0; i<n; i++)
if
(!isnan(data[i])) {
132
sumsqr+=data[i]*data[i]; sqrsum+=data[i];
133
}
134
avg=sqrsum/(double)m;
if
(sd==NULL)
return
(avg);
// SD not requested
135
if
(m==1) {
136
*sd=0.0;
137
}
else
{
138
sqrsum*=sqrsum;
139
*sd=sqrt( (sumsqr - sqrsum/(
double
)m) / (
double
)(m-1) );
140
}
141
return
(avg);
142
}
143
/******************************************************************************/
144
145
/******************************************************************************/
libtpcmodel.h
Header file for libtpcmodel.
dmean_nan
double dmean_nan(double *data, int n, double *sd, int *vn)
Definition
median.c:104
dmean
double dmean(double *data, int n, double *sd)
Definition
median.c:73
dmedian
double dmedian(double *data, int n)
Definition
median.c:48
d_kth_smallest
double d_kth_smallest(double *data, int n, int k)
Definition
median.c:15
Generated on
for TPCCLIB by
1.17.0