目标:实现sqrt开方函数。
方法:如果返回值是int值,可以用二分法来做。是通过x的平方与待开方数进行比较,取最接近的数。这里说的不是这个方法。因为面试时,你说二分法他们不满意,问有没有更好的方法。当然是有的,用牛顿迭代法。
牛顿迭代法:是数学中一种求解近似值的方法。如下图所示就是牛顿迭代法的简单推导
那么对于求开方这个问题,则就是解函数,如下图所示
代码
class Solution{
public:
double sqrt(int n){
double x;
double tmp=1;
do{
x = tmp;//当前值
tmp = (x+(double)n/(double)x)/2;//逼近值
}while(abs(tmp-x)>0.000001);//终止条件是两次值之间的小于等于0.000001
return tmp;
}
};