Java BigDecimal开方

原文连接: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;
}
------ 本文结束------
0%