看公式,可以推断出计算标准差分为几步:
计算平均值u=(x1+x2+...+xn)/n
计算方差s²=((x1-u)^2 +(x2-u)^2 +...+(xn-u)^2)/n
计算标准差σ=sqrt(s²)
/** * 求平均值 */double average(double *x, int len){ double sum = 0; for (int i = 0; i < len; i++) // 求和 sum += x[i]; return sum/len; // 得到平均值}
/** * 求方差 */double variance(double *x, int len){ double average = average(x, len); for (int i = 0; i < len; i++) // 求和 sum += pow(x[i] - average, 2); return sum/len; // 得到平均值}
/** * 求标准差 */double average(double *x, int len){ double variance = variance(x, len); return sqrt(variance); // 得到标准差}
最后,注意double *x在使用后的释放问题,遵循"谁申请谁释放"(new[]/delete[])原则
if(NULL != x) { delete[] x; x = NULL; }
作者:ThinkinLiu
链接:https://www.jianshu.com/p/dc5cb1346d7d