TPCCLIB
Loading...
Searching...
No Matches
mean.c
Go to the documentation of this file.
1
4/*****************************************************************************/
5#include "tpcclibConfig.h"
6/*****************************************************************************/
7#include <stdio.h>
8#include <stdlib.h>
9#include <math.h>
10#include <string.h>
11/*****************************************************************************/
12#include "tpcextensions.h"
13/*****************************************************************************/
14#include "tpcstatist.h"
15/*****************************************************************************/
16
17/*****************************************************************************/
27 double *data,
29 unsigned int n,
31 double *mean,
33 double *sd,
36 unsigned int *vn
37) {
38 unsigned int i, m;
39 double sumsqr=0.0, sqrsum=0.0;
40
41 if(mean!=NULL) *mean=nan("");
42 if(sd!=NULL) *sd=nan("");
43 if(vn!=NULL) *vn=0;
44 if(n<1 || data==NULL) return(1);
45 for(i=m=0; i<n; i++) if(!isnan(data[i])) m++;
46 if(m<1) return(2);
47 if(vn!=NULL) *vn=m;
48
49 /* Calculate mean, and sum for possible SD calculation */
50 for(i=0; i<n; i++) if(!isnan(data[i])) sqrsum+=data[i];
51 if(mean!=NULL) *mean=sqrsum/(double)m;
52
53 /* Calculate SD, if required */
54 if(sd==NULL) return(0);
55 if(m==1) {*sd=0.0; return(0);}
56 sqrsum*=sqrsum;
57
58 for(i=0; i<n; i++) if(!isnan(data[i])) sumsqr+=data[i]*data[i];
59 double ff=sumsqr - sqrsum/(double)m; if(!(ff>0.0)) {*sd=0.0; return(0);}
60 *sd=sqrt( ff/(double)(m-1) );
61
62 return(0);
63}
64/*****************************************************************************/
65
66/*****************************************************************************/
75 float *data,
77 unsigned int n,
79 float *mean,
81 float *sd,
84 unsigned int *vn
85) {
86 unsigned int i, m;
87 float sumsqr=0.0, sqrsum=0.0;
88
89 if(mean!=NULL) *mean=nanf("");
90 if(sd!=NULL) *sd=nanf("");
91 if(vn!=NULL) *vn=0;
92 if(n<1 || data==NULL) return(1);
93 for(i=m=0; i<n; i++) if(!isnan(data[i])) m++;
94 if(m<1) return(2);
95 if(vn!=NULL) *vn=m;
96
97 /* Calculate mean, and sum for possible SD calculation */
98 for(i=0; i<n; i++) if(!isnan(data[i])) sqrsum+=data[i];
99 if(mean!=NULL) *mean=sqrsum/(float)m;
100
101 /* Calculate SD, if required */
102 if(sd==NULL) return(0);
103 if(m==1) {*sd=0.0; return(0);}
104 sqrsum*=sqrsum;
105
106 for(i=0; i<n; i++) if(!isnan(data[i])) sumsqr+=data[i]*data[i];
107 float ff=sumsqr - sqrsum/(float)m; if(!(ff>0.0)) {*sd=0.0; return(0);}
108 *sd=sqrtf( ff/(float)(m-1) );
109
110 return(0);
111}
112/*****************************************************************************/
113
114/*****************************************************************************/
int statMeanSD(double *data, unsigned int n, double *mean, double *sd, unsigned int *vn)
Definition mean.c:25
int fstatMeanSD(float *data, unsigned int n, float *mean, float *sd, unsigned int *vn)
Definition mean.c:73
Header file for library libtpcextensions.
Header file for libtpcstatist.