public class SqrtDemo {
public static void main(String[] args) {
sqrtNewton(2, 0.00000001);
// squareRoot(2, 0.00000001);
}
/**
* 牛顿开根法
*
* @param i 根
* @param gap 精度
*/
private static void sqrtNewton(double i, double gap) {
double value = i / 2;
double gapNow;
int count = 0;
do {
value = (value + i / value) / 2;
gapNow = value * value - i;
count++;
} while (gapNow > gap);
System.out.println("value: " + value);
System.out.println("count: " + count);
}
/**
* 二分法开根
*
* @param i 根
* @param gap 精度
*/
private static void sqrtRoot(double i, double gap) {
double start = 0;
double end = i;
double gapNow;
int count = 0;
do {
double value = (start + end) / 2;
double temp = value * value;
if (temp > i) {
end = value;
} else {
start = value;
}
gapNow = end - start;
count++;
} while (gapNow > gap);
System.out.println("value: " + (start + end) / 2);
System.out.println("count: " + count);
}
}