30 static MDB_THREAD_LOCAL
double *data = NULL;
31 static MDB_THREAD_LOCAL
long last_n = 0;
37 data =
trealloc(data,
sizeof(*data) * n);
40 for (i = 0; i < n; i++)
57 static MDB_THREAD_LOCAL
double *data = NULL;
58 static MDB_THREAD_LOCAL
long last_n = 0;
61 if (n <= 0 || percentile < 0 || percentile > 100)
64 data =
trealloc(data,
sizeof(*data) * n);
67 for (i = 0; i < n; i++)
70 *value = data[(long)((n - 1) * (percentile / 100.0))];
85 static MDB_THREAD_LOCAL
double *data = NULL;
86 static MDB_THREAD_LOCAL
long last_n = 0;
89 if (n <= 0 || positions <= 0)
91 for (ip = 0; ip < positions; ip++)
92 if (percent[ip] < 0 || percent[ip] > 100)
95 data =
trealloc(data,
sizeof(*data) * n);
98 memcpy((
char *)data, (
char *)x,
sizeof(*x) * n);
100 for (ip = 0; ip < positions; ip++)
101 position[ip] = data[(
long)((n - 1) * (percent[ip] / 100.0))];
117 static MDB_THREAD_LOCAL
double *data = NULL;
118 static MDB_THREAD_LOCAL int64_t last_n = 0;
119 int64_t ip, jp, count;
121 if (n <= 0 || positions <= 0)
123 for (ip = 0; ip < positions; ip++)
124 if (percent[ip] < 0 || percent[ip] > 100)
126 for (ip=count=0; ip<n; ip++)
131 if (count > last_n) {
132 data =
trealloc(data,
sizeof(*data) * count);
135 for (ip=jp=0; ip<n; ip++)
139 for (ip = 0; ip < positions; ip++)
140 position[ip] = data[(
long)((count - 1) * (percent[ip] / 100.0))];
159 for (i = sum = 0; i < n; i++)
180 *value = (min + max) / 2;
197 double *hist, *cdf, xMin, xMax, xCenter, xRange;
199 if (bins < 2 || positions <= 0 || n <= 0)
201 for (i = 0; i < positions; i++)
202 if (percent[i] < 0 || percent[i] > 100)
204 if (!(hist = malloc(
sizeof(*hist) * bins)))
207 xCenter = (xMax + xMin) / 2;
208 xRange = (xMax - xMin) * (1 + 1. / bins) / 2;
209 xMin = xCenter - xRange;
210 xMax = xCenter + xRange;
214 for (i = 1; i < bins; i++)
215 cdf[i] += cdf[i - 1];
216 for (i = 0; i < bins; i++)
217 cdf[i] /= cdf[bins - 1];
219 for (j = 0; j < positions; j++) {
220 for (i = k = 0; i < bins; i++) {
221 if (cdf[i] < percent[j] / 100.0)
226 position[j] = xMin + (k * (xMax - xMin)) / bins;
void * trealloc(void *old_ptr, uint64_t size_of_block)
Reallocates a memory block to a new size.
int find_min_max(double *min, double *max, double *list, int64_t n)
Finds the minimum and maximum values in a list of doubles.
long make_histogram(double *hist, long n_bins, double lo, double hi, double *data, int64_t n_pts, long new_start)
Compiles a histogram from data points.
int double_cmpasc(const void *a, const void *b)
Compare two doubles in ascending order.