功能说明
标准差衡量数值离散程度,总体与样本使用不同分母。该函数先计算均值,再求平方偏差和,最后按总体 n 或样本 n-1 取平方根。一次遍历求和,一次遍历求平方偏差,适合对中小规模指标做快速分析,并明确区分两种统计口径。
关键代码
standardDeviation 校验数组和非有限数字,空数组抛 RangeError;样本模式要求至少两个值。VarianceKind 类型限制取值,运行时仍检查 kind。均值用 reduce 求和,平方偏差同样用 reduce,最后 Math.sqrt 返回非负数。
const mean = values.reduce((total, value) => total + value, 0) / count;
const sumSquares = values.reduce((total, value) => total + (value - mean) ** 2, 0);
return Math.sqrt(sumSquares / (kind === "sample" ? count - 1 : count));
使用注意
该实现只支持未分组数值,不支持加权标准差。大数相减可能损失精度。样本模式在只有一个值时无法估计方差,因此抛错。返回值为非负数,全部相同时为 0。计算会遍历两次数组,超大流式数据应改用在线算法。
验证方式
断言 standardDeviation([2, 4, 4, 4, 5, 5, 7, 9]) 约等于 2。样本模式结果约等于 2.138。单元素总体标准差为 0,单元素样本模式抛 RangeError。包含 Infinity 抛 TypeError。非法 kind 抛 RangeError,输入数组不应被修改。