Java求指定精度的開根號運算

原理是二分法不斷迭代:

取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));
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章