二分法实现开方
一个面试题:不用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; }