quantiles: add functions to get max k and min step

This commit is contained in:
Miroslav Lichvar
2024-11-18 15:54:17 +01:00
parent 65b5f111d2
commit 77962bb527
4 changed files with 22 additions and 2 deletions

View File

@@ -199,8 +199,8 @@ HCL_ProcessReadings(HCL_Instance clock, int n_readings, struct timespec tss[][3]
local_prec = LCL_GetSysPrecisionAsQuantum();
low_delay = QNT_GetQuantile(clock->delay_quants, DELAY_QUANT_MIN_K);
high_delay = QNT_GetQuantile(clock->delay_quants, DELAY_QUANT_MAX_K);
low_delay = QNT_GetQuantile(clock->delay_quants, QNT_GetMinK(clock->delay_quants));
high_delay = QNT_GetQuantile(clock->delay_quants, QNT_GetMaxK(clock->delay_quants));
low_delay = MIN(low_delay, high_delay);
high_delay = MAX(high_delay, low_delay + local_prec);

View File

@@ -193,6 +193,22 @@ QNT_GetMinK(QNT_Instance inst)
/* ================================================== */
int
QNT_GetMaxK(QNT_Instance inst)
{
return inst->min_k + (inst->n_quants / inst->repeat) - 1;
}
/* ================================================== */
double
QNT_GetMinStep(QNT_Instance inst)
{
return inst->min_step;
}
/* ================================================== */
double
QNT_GetQuantile(QNT_Instance inst, int k)
{

View File

@@ -36,6 +36,8 @@ extern void QNT_DestroyInstance(QNT_Instance inst);
extern void QNT_Reset(QNT_Instance inst);
extern void QNT_Accumulate(QNT_Instance inst, double value);
extern int QNT_GetMinK(QNT_Instance inst);
extern int QNT_GetMaxK(QNT_Instance inst);
extern double QNT_GetMinStep(QNT_Instance inst);
extern double QNT_GetQuantile(QNT_Instance inst, int k);
#endif

View File

@@ -43,6 +43,8 @@ test_unit(void)
inst = QNT_CreateInstance(min_k, max_k, q, r, 1e-9);
TEST_CHECK(min_k == QNT_GetMinK(inst));
TEST_CHECK(max_k == QNT_GetMaxK(inst));
TEST_CHECK(fabs(QNT_GetMinStep(inst) - 1e-9) < 1e-12);
for (j = 0; j < 3000; j++) {
x = TST_GetRandomDouble(0.0, 2e-6);