double
statHistDeltaPctile(const StatHist & A, const StatHist & B, double pctile)
+{
+ return A.deltaPctile(B,pctile);
+}
+
+double
+StatHist::deltaPctile(const StatHist & B, double pctile) const
{
int i;
int s1 = 0;
int a = 0;
int b = 0;
int I = 0;
- int J = A.capacity;
+ int J = capacity;
int K;
double f;
- assert(A.capacity == B.capacity);
+ assert(capacity == B.capacity);
- int *D = (int *)xcalloc(A.capacity, sizeof(int));
+ int *D = (int *)xcalloc(capacity, sizeof(int));
- for (i = 0; i < A.capacity; ++i) {
- D[i] = B.bins[i] - A.bins[i];
+ for (i = 0; i < capacity; ++i) {
+ D[i] = B.bins[i] - bins[i];
assert(D[i] >= 0);
}
- for (i = 0; i < A.capacity; ++i)
+ for (i = 0; i < capacity; ++i)
s1 += D[i];
h = int(s1 * pctile);
- for (i = 0; i < A.capacity; ++i) {
+ for (i = 0; i < capacity; ++i) {
J = i;
b += D[J];
K = (int) floor(f * (double) (J - I) + I);
- return A.val(K);
+ return val(K);
}
static void
class StatHist {
public:
void clear();
- int *bins;
int capacity;
double min;
double max;
double val(int bin) const; //todo: make private
void count(double val);
StatHist &operator=(const StatHist &);
- StatHist() : bins(NULL), capacity(0), min(0), max(0), scale(1.0),
- val_in(NULL), val_out(NULL) {};
+ StatHist() : scale(1.0) {};
StatHist(const StatHist&);
void dump(StoreEntry *sentry, StatHistBinDumper * bd) const;
void logInit(int capacity, double min, double max);
void enumInit(int last_enum);
void intInit(int n);
void init(int capacity, hbase_f * val_in, hbase_f * val_out, double min, double max);
+ double deltaPctile(const StatHist & B, double pctile);
private:
int findBin(double v);
+ int *bins;
+
};
/* StatHist */