原文连接:https://blog.csdn.net/RickyIT/article/details/78051334
/**
* 标准差σ=sqrt(s^2)
* 结果精度:scale
* 牛顿迭代法求大数开方
*
* @param x
* @param scale
* @return
*/
public static BigDecimal standardDeviation(BigDecimal[] x, int scale) {
//方差
BigDecimal variance = variance(x, scale);
BigDecimal base2 = BigDecimal.valueOf(2.0);
//计算精度
int precision = 100;
MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);
BigDecimal deviation = variance;
int cnt = 0;
while (cnt < 100) {
deviation = (deviation.add(variance.divide(deviation, mc))).divide(base2, mc);
cnt++;
}
deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP);
return deviation;
}