思想
二分法聘殖,自最開始 0 至該數(shù)的中點奸腺,比較中點乘積與該數(shù)的差值,直至差值小于指定精度突照。
示例
/**
* 遞歸法
*
* @param n 數(shù)值
* @param i 左邊界
* @param j 右邊界
* @param decimal 保留小數(shù)位
* @return 指定精度平方根
*/
public double sqrt(int n, double i, double j, int decimal) {
double m = (j - i) / 2 + i, threshold = Math.pow(0.1, decimal), tmp = m * m;
if (Math.abs(tmp - n) > threshold) {
return tmp > n ? sqrt(n, i, m, decimal) : sqrt(n, m, j, decimal);
} else {
return new BigDecimal(m).setScale(decimal, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
/**
* 循環(huán)法
*
* @param n 數(shù)值
* @param decimal 保留小數(shù)位
* @return 指定精度平方根
*/
public double sqrt(int n, int decimal) {
double i = 0, j = n, m, threshold = Math.pow(0.1, decimal);
while (true) {
m = (j - i) / 2 + i;
double tmp = m * m;
if (Math.abs(tmp - n) > threshold) {
if (tmp > n) {
j = m;
} else {
i = m;
}
} else {
return new BigDecimal(m).setScale(decimal, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
}