原理是二分法不斷迭代:
取max爲指定值target,min爲1,精度要求m;取min和max的中點mid,當midmid>target,把max設定爲mid;當midmid<target,把min設定爲mid。然後max和min求出新的中間 newMin。
結果就在mid和newMid之間,並不斷逼近最終結果,當newMid-mid的絕對值小於m時,結果即爲所求
【代碼】
package practice;
public class Sqrt {
public double method(double target, double m) {
double min,max,mid,newMid;
min = 1;
max = target;
mid = (min+max) / 2;
do {
if (mid*mid<target) {
min = mid;
} else {
max = mid;
}
newMid = mid;
mid = (max+min)/2;
} while (abs(mid,newMid)>m);
return mid;
}
public double abs(double a, double b) {
if (a>b) return a-b;
else return b-a;
}
public static void main(String[] args) {
System.out.println(new Sqrt().method(20,0.0001));
System.out.println(Math.sqrt(20));
}
}