Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

mdp_measure.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00025 class mdp_measure {
00026 public:
00027         int    num; 
00028         float mean;
00029         float error;
00030         int getnum() { return num; }
00031         float getmean() { return mean; }
00032         float getmerr() { return error; }
00033         mdp_measure() {
00034                 num=0;
00035                 mean=0;
00036                 error=0;
00037                 }
00038         mdp_measure(float mean_, float error_, int num_=1) {
00039                 num=num_;
00040                 mean=mean_;
00041                 error=error_;
00042                 }
00043         void reset() {
00044                 num=0;
00045                 mean=0;
00046                 error=0;
00047                 }
00048         void set(float x, float dx, int i=1) {
00049                 num=i;
00050                 mean=x;
00051                 error=dx;
00052                 }
00053         void operator << (float x) {
00054                 float err2;
00055                 err2=num*(pow((double)error,(double)2.0)+mean*mean)+pow((double)x,(double)2.0);
00056                 num++;
00057                 mean=(mean*(num-1)+x)/num;
00058                 error=sqrt(err2/num-mean*mean);
00059                 }
00060         void operator >> (float &x) {
00061                 x=mean+error*Random.gaussian();
00062                 }
00063         friend mdp_measure operator +(mdp_measure a, mdp_measure b) { 
00064                 mdp_measure tmp;
00065                 tmp.mean =a.mean +b.mean;
00066                 tmp.error=a.error+b.error;
00067                 tmp.num=1;
00068                 return tmp;
00069                 }
00070         friend mdp_measure operator -(mdp_measure a, mdp_measure b) {
00071                 mdp_measure tmp;
00072                 tmp.mean =a.mean -b.mean;
00073                 tmp.error=a.error+b.error;
00074                 tmp.num=1;
00075                 return tmp;
00076                 }
00077         friend mdp_measure operator *(mdp_measure a, mdp_measure b) {
00078                 mdp_measure tmp;
00079                 tmp.mean =a.mean *b.mean;
00080                 tmp.error=fabs(a.mean)*b.error+a.error*fabs(b.mean);
00081                 tmp.num=1;
00082                 return tmp;
00083                 }
00084         friend mdp_measure operator /(mdp_measure a, mdp_measure b) {
00085                 mdp_measure tmp;
00086                 tmp.mean =a.mean/b.mean;
00087                 tmp.error=a.error/fabs(b.mean)+
00088                           fabs(a.mean)/pow((double)b.mean,(double)2.0)*b.error;
00089                 tmp.num=1;
00090                 return tmp;
00091                 }               
00092         friend mdp_measure operator +(float a, mdp_measure b) {
00093                 mdp_measure tmp;
00094                 tmp.mean =a +b.mean;
00095                 tmp.error=b.error;
00096                 tmp.num=1;
00097                 return tmp;
00098                 }
00099         friend mdp_measure operator -(float a, mdp_measure b) {
00100                 mdp_measure tmp;
00101                 tmp.mean =a-b.mean;
00102                 tmp.error=b.error;
00103                 tmp.num=1;
00104                 return tmp;
00105                 }
00106         friend mdp_measure operator *(float a, mdp_measure b) {
00107                 mdp_measure tmp;
00108                 tmp.mean =a*b.mean;
00109                 tmp.error=fabs(a)*b.error;
00110                 tmp.num=1;
00111                 return tmp;
00112                 }
00113         friend mdp_measure operator /(float a, mdp_measure b) {
00114                 mdp_measure tmp;
00115                 tmp.mean =a/b.mean;
00116                 tmp.error=fabs(a)/pow((double)b.mean,(double)2.0)*b.error;
00117                 tmp.num=1;
00118                 return tmp;
00119                 }       
00120         friend mdp_measure operator +(mdp_measure a, float b) {
00121                 mdp_measure tmp;
00122                 tmp.mean =a.mean +b;
00123                 tmp.error=a.error;
00124                 tmp.num=1;
00125                 return tmp;
00126                 }
00127         friend mdp_measure operator -(mdp_measure a, float b) {
00128                 mdp_measure tmp;
00129                 tmp.mean =a.mean -b;
00130                 tmp.error=a.error;
00131                 tmp.num=1;
00132                 return tmp;
00133                 }
00134         friend mdp_measure operator *(mdp_measure a, float b) {
00135                 mdp_measure tmp;
00136                 tmp.mean =a.mean *b;
00137                 tmp.error=a.error*fabs(b);
00138                 tmp.num=1;
00139                 return tmp;
00140                 }
00141         friend mdp_measure operator /(mdp_measure a, float b) {
00142                 mdp_measure tmp;
00143                 tmp.mean =a.mean/b;
00144                 tmp.error=a.error/fabs(b);
00145                 tmp.num=1;
00146                 return tmp;
00147                 } 
00148         friend mdp_measure exp(mdp_measure a) {
00149                 mdp_measure tmp;
00150                 tmp.mean=exp(a.mean);
00151                 tmp.error=exp(a.mean)*a.error;
00152                 tmp.num=1;
00153                 return tmp;
00154                 }
00155         friend mdp_measure log(mdp_measure a) {
00156                 mdp_measure tmp;
00157                 tmp.mean=log(a.mean);
00158                 tmp.error=a.error/fabs(a.mean);
00159                 tmp.num=1;
00160                 return tmp;
00161                 }
00162         friend mdp_measure pow(mdp_measure a, float b) {
00163                 mdp_measure tmp;
00164                 tmp.mean=pow((double) a.mean,(double) b);
00165                 tmp.error=a.error*b*pow((double) a.mean,(double) b-1);
00166                 tmp.num=1;
00167                 return tmp;
00168                 }
00169         friend mdp_measure sin(mdp_measure a) {
00170                 mdp_measure tmp;
00171                 tmp.mean=sin(a.mean);
00172                 tmp.error=fabs(cos(a.mean))*a.error;
00173                 tmp.num=1;
00174                 return tmp;
00175                 }
00176         friend mdp_measure cos(mdp_measure a) {
00177                 mdp_measure tmp;
00178                 tmp.mean=cos(a.mean);
00179                 tmp.error=fabs(sin(a.mean))*a.error;
00180                 tmp.num=1;
00181                 return tmp;
00182                 }
00183                 friend void print(mdp_measure a) {
00184                 printf("%f (%f)\n", a.mean, a.error);
00185                 }
00186 };

Generated on Sun Feb 27 15:12:21 2005 by  doxygen 1.4.1