Commit fabde384 authored by Damien Lespiau's avatar Damien Lespiau

stats: Add support for the interquartile range (IQR)

IQR is a good measure of dispersion.
Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
parent 1b8997b3
...@@ -216,7 +216,7 @@ uint64_t igt_stats_get_max(igt_stats_t *stats) ...@@ -216,7 +216,7 @@ uint64_t igt_stats_get_max(igt_stats_t *stats)
* *
* The range can be a deceiving characterization of the values, because there * The range can be a deceiving characterization of the values, because there
* can be extreme minimal and maximum values that are just anomalies. Prefer * can be extreme minimal and maximum values that are just anomalies. Prefer
* the interquatile range or an histogram. * the interquatile range (see igt_stats_get_iqr()) or an histogram.
*/ */
uint64_t igt_stats_get_range(igt_stats_t *stats) uint64_t igt_stats_get_range(igt_stats_t *stats)
{ {
...@@ -339,6 +339,22 @@ void igt_stats_get_quartiles(igt_stats_t *stats, ...@@ -339,6 +339,22 @@ void igt_stats_get_quartiles(igt_stats_t *stats,
*q3 = ret; *q3 = ret;
} }
/**
* igt_stats_get_iqr:
* @stats: An #igt_stats_t instance
*
* Retrieves the
* [interquartile range](https://en.wikipedia.org/wiki/Interquartile_range)
* (IQR) of the @stats dataset.
*/
double igt_stats_get_iqr(igt_stats_t *stats)
{
double q1, q3;
igt_stats_get_quartiles(stats, &q1, NULL, &q3);
return (q3 - q1);
}
/** /**
* igt_stats_get_median: * igt_stats_get_median:
* @stats: An #igt_stats_t instance * @stats: An #igt_stats_t instance
......
...@@ -59,6 +59,7 @@ uint64_t igt_stats_get_max(igt_stats_t *stats); ...@@ -59,6 +59,7 @@ uint64_t igt_stats_get_max(igt_stats_t *stats);
uint64_t igt_stats_get_range(igt_stats_t *stats); uint64_t igt_stats_get_range(igt_stats_t *stats);
void igt_stats_get_quartiles(igt_stats_t *stats, void igt_stats_get_quartiles(igt_stats_t *stats,
double *q1, double *q2, double *q3); double *q1, double *q2, double *q3);
double igt_stats_get_iqr(igt_stats_t *stats);
double igt_stats_get_mean(igt_stats_t *stats); double igt_stats_get_mean(igt_stats_t *stats);
double igt_stats_get_median(igt_stats_t *stats); double igt_stats_get_median(igt_stats_t *stats);
double igt_stats_get_variance(igt_stats_t *stats); double igt_stats_get_variance(igt_stats_t *stats);
......
...@@ -102,6 +102,7 @@ static void test_quartiles(void) ...@@ -102,6 +102,7 @@ static void test_quartiles(void)
igt_assert_eq_double(q2, 40); igt_assert_eq_double(q2, 40);
igt_assert_eq_double(q3, 42.5); igt_assert_eq_double(q3, 42.5);
igt_assert_eq_double(igt_stats_get_median(&stats), 40); igt_assert_eq_double(igt_stats_get_median(&stats), 40);
igt_assert_eq_double(igt_stats_get_iqr(&stats), 42.5 - 25.5);
igt_stats_fini(&stats); igt_stats_fini(&stats);
...@@ -114,6 +115,7 @@ static void test_quartiles(void) ...@@ -114,6 +115,7 @@ static void test_quartiles(void)
igt_assert_eq_double(q2, 37.5); igt_assert_eq_double(q2, 37.5);
igt_assert_eq_double(q3, 40); igt_assert_eq_double(q3, 40);
igt_assert_eq_double(igt_stats_get_median(&stats), 37.5); igt_assert_eq_double(igt_stats_get_median(&stats), 37.5);
igt_assert_eq_double(igt_stats_get_iqr(&stats), 40 - 15);
igt_stats_fini(&stats); igt_stats_fini(&stats);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment