码迷,mamicode.com
首页 > 其他好文 > 详细

二分法实现开方

时间:2020-03-21 13:11:38      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:初始化   条件   面试   中间   实现   turn   else   pre   names   

一个面试题:不用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;
}

 

二分法实现开方

标签:初始化   条件   面试   中间   实现   turn   else   pre   names   

原文地址:https://www.cnblogs.com/xiaokang01/p/12538461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!