summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2015-06-27 15:49:26 +0100
committerDamien Lespiau <damien.lespiau@intel.com>2015-06-27 16:04:08 +0100
commitfabde384a33324dc9a9c55c1f4003196ec90564c (patch)
tree14c7f05f1de31343f6d280ef539f9b6c05e5a8c3 /lib
parent1b8997b3f89f5c7632782d2e7f8509a0f8176891 (diff)
stats: Add support for the interquartile range (IQR)
IQR is a good measure of dispersion. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/igt_stats.c18
-rw-r--r--lib/igt_stats.h1
-rw-r--r--lib/tests/igt_stats.c2
3 files changed, 20 insertions, 1 deletions
diff --git a/lib/igt_stats.c b/lib/igt_stats.c
index 66fd5636..caf3f374 100644
--- a/lib/igt_stats.c
+++ b/lib/igt_stats.c
@@ -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
* 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)
{
@@ -340,6 +340,22 @@ void igt_stats_get_quartiles(igt_stats_t *stats,
}
/**
+ * 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:
* @stats: An #igt_stats_t instance
*
diff --git a/lib/igt_stats.h b/lib/igt_stats.h
index 887fa79c..6ee3ae69 100644
--- a/lib/igt_stats.h
+++ b/lib/igt_stats.h
@@ -59,6 +59,7 @@ uint64_t igt_stats_get_max(igt_stats_t *stats);
uint64_t igt_stats_get_range(igt_stats_t *stats);
void igt_stats_get_quartiles(igt_stats_t *stats,
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_median(igt_stats_t *stats);
double igt_stats_get_variance(igt_stats_t *stats);
diff --git a/lib/tests/igt_stats.c b/lib/tests/igt_stats.c
index c4c67760..c0649f33 100644
--- a/lib/tests/igt_stats.c
+++ b/lib/tests/igt_stats.c
@@ -102,6 +102,7 @@ static void test_quartiles(void)
igt_assert_eq_double(q2, 40);
igt_assert_eq_double(q3, 42.5);
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);
@@ -114,6 +115,7 @@ static void test_quartiles(void)
igt_assert_eq_double(q2, 37.5);
igt_assert_eq_double(q3, 40);
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);
}