/**
* [调和平均数](https://en.wikipedia.org/wiki/Harmonic_mean)是一种
* 通常用于计算比率平均值的均值函数。
* 该均值通过取输入数字倒数算术平均数的倒数来计算。
*
* 这是一种[集中趋势度量](https://en.wikipedia.org/wiki/Central_tendency):
* 用于寻找一组数字的典型值或中心值的方法。
*
* 该函数的时间复杂度为`O(n)`,即线性时间,与数组长度成正比。
*
* @param {Array<number>} x 包含一个或多个数据点的样本
* @returns {number} 调和平均数
* @throws {Error} 如果x为空
* @throws {Error} 如果x包含负数
* @example
* harmonicMean([2, 3]).toFixed(2) // => '2.40'
*/
function harmonicMean(x) {
if (x.length === 0) {
throw new Error("harmonicMean函数至少需要一个数据点");
}
let reciprocalSum = 0;
for (let i = 0; i < x.length; i++) {
// 调和平均数仅对正数有效
if (x[i] <= 0) {
throw new Error("harmonicMean函数要求输入必须为正数");
}
reciprocalSum += 1 / x[i];
}
// 用n除以倒数之和
return x.length / reciprocalSum;
}
export default harmonicMean;