int computeEasy(const int& ival=0) { return mean(&measurements, ival); }
- int computeJack(restype (*func)(vector< vector <meastype> > *vals, void *para), void *para=NULL);
int computeJack(void (*preMeasFunc)(vector< vector <meastype> > *allVals, vector <meastype> *preCalculated, void *para),
restype (*measFunc)(vector <meastype> *preCalculated, vector <meastype> *excludedmeas, int nmeas, void *para), void *para=NULL);
return computations.size()-1;
}
-template <typename meastype, typename restype>
-int obstat<meastype,restype>::computeJack(restype (*func)(vector< vector<meastype> > *vals, void *para), void *para)
-{
- int nmeas=measurements.size();
- restype manymeans[nmeas];
- result jackres;
-
- jackres.val = 0;
- jackres.err = 0;
-
- int imeas=0;
- for(typename vector< vector<meastype> >::iterator removedIt = measurements.begin(); removedIt != measurements.end(); ++removedIt, imeas++)
- {
- vector<meastype> removed = *removedIt;
-
- *removedIt = measurements.back();
- measurements.pop_back();
-
- manymeans[imeas] = func(&measurements, para);
- jackres.val += manymeans[imeas];
-
- measurements.push_back( *removedIt );
- *removedIt = removed;
- }
- jackres.val /= nmeas;
-
- for(int imean=0; imean<nmeas; imean++)
- jackres.err += pow( manymeans[imean] - jackres.val, 2 );
- jackres.err *= (double)(nmeas-1)/nmeas;
- jackres.err = sqrt(jackres.err);
-
- computations.push_back(jackres);
-
- return computations.size()-1;
-}
-
template <typename meastype, typename restype>
int obstat<meastype,restype>::computeJack(void (*preMeasFunc)(vector< vector <meastype> > *allVals, vector<meastype> *preCalculated, void *para),
restype (*measFunc)(vector<meastype> *preCalculated, vector<meastype> *excludedmeas, int nmeas, void *para),
void *para) {
int nmeas=measurements.size();
- restype manymeans[nmeas];
+ restype *manymeans = new restype[nmeas];
result jackres;
vector<meastype> preCalculated;
computations.push_back(jackres);
+ delete [] manymeans;
+
return computations.size()-1;
}