in packages/core/src/utils.js [31:62]
export function computeStatistics(numbers) {
if (!Array.isArray(numbers) || numbers.length === 0) {
throw new Error("Input must be a non-empty array of numbers");
}
const n = numbers.length;
const sum = numbers.reduce((a, b) => a + b, 0);
const mean = sum / n;
// Sort the array for percentile calculations
const sorted = numbers.toSorted((a, b) => a - b);
const min = sorted.at(0);
const max = sorted.at(-1);
// Calculate standard deviation (population std dev)
const variance = numbers.reduce((acc, num) => acc + (num - mean) ** 2, 0) / n;
const stdDev = Math.sqrt(variance);
return {
min,
max,
mean,
median: getPercentile(sorted, 50),
p1: getPercentile(sorted, 1),
p5: getPercentile(sorted, 5),
p10: getPercentile(sorted, 10),
p90: getPercentile(sorted, 90),
p95: getPercentile(sorted, 95),
p99: getPercentile(sorted, 99),
stdDev,
};
}