Q&A

求一个数的平方根

public static BigDecimal sqrtRoot(BigDecimal m) {
        if ( m.compareTo( new BigDecimal(0)) == 0 ) {
            return new BigDecimal(0);
        }

        BigDecimal i = new BigDecimal("0");
        BigDecimal x1 = new BigDecimal("0");
        BigDecimal x2 = new BigDecimal("0");
        while (   ( i.multiply(i) ).compareTo(m)  == -1 ) {
            i =  i.add( new BigDecimal(0.1).setScale(8, RoundingMode.HALF_UP));
        }

        x1 = i;
        for ( int j = 0; j < 10; j++) {
            x2 = m;
            x2 = x2.divide(x1, 8, RoundingMode.HALF_UP);
            x2 = x2.add(x1);
            x2 = x2.divide(new BigDecimal("2"), 8, RoundingMode.HALF_UP);
            x1 = x2;
        }
        return x2;
    }

    for ( int i = 0; i <= 10; i++ ) {
        System.out.println(i + " : " + sqrtRoot( new BigDecimal(i)));
    }

Last updated

Was this helpful?