二分法實現開方


一個面試題:不用sqrt函數如何實現開方

用二分法。

上界初始化為數字本身,下界初始化為0.0,這樣用二分,判斷中間數字的平方和目標數字比較,再修改上界和下界,直到小於一定的閾值。

注意結束條件和精度判斷

//
// Created by LK on 2020/3/21.

#include <iostream>
#include <cmath>
using namespace std;
// 不用sqrt庫函數,實現開方
// 思路用二分法,比如2,  left=0,right = 2, 然后
class Solution
{
public:
    double Sqrt(double n)
    {
//        if(n == 1)
//            return n;
        double left = 0.0;
        double hight = n;
        double p = 1e-5;  // 此處為精度,當滿足該精度時返回近似值
        double mid = (left + hight)/2.0;
        while (fabs(mid * mid - n) > p)  // 精度比較
        {
            if(mid * mid > n)
                hight = mid;
            else if (mid * mid < n)
                left = mid;
            else
                return mid;
            mid = (left + hight)/2.0;
        }
        return mid;
    }
};
int main()
{
    Solution s;
    cout << s.Sqrt(4);
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM