diff --git a/replayer/metrics.py b/replayer/metrics.py index f48cbf2..aaf9f90 100644 --- a/replayer/metrics.py +++ b/replayer/metrics.py @@ -101,7 +101,11 @@ def _stats(values: list[float | None]) -> dict[str, float] | None: def _percentile(sorted_vals: list[float], pct: float) -> float: - if len(sorted_vals) == 1: + n = len(sorted_vals) + if n == 1: return sorted_vals[0] - idx = round((len(sorted_vals) - 1) * pct) - return sorted_vals[idx] + rank = pct * (n - 1) + lo = int(rank) + hi = min(lo + 1, n - 1) + frac = rank - lo + return sorted_vals[lo] * (1 - frac) + sorted_vals[hi] * frac