二分法、牛顿迭代法求sqrt()
2013-12-04 16:10
281 查看
给定一个正数a,不用库函数求其平方根。
设其平方根为x,则有x2=a,即x2-a=0。设函数f(x)= x2-a,则可得图示红色的函数曲线。在曲线上任取一点(x0,f(x0)),其中x0≠0那么曲线上该点的切线方程为
(1-1)
求该切线与x轴的交点得
(1-2)
因为1-2式中x0作为分母,所以在之前限定了一下初始值不要选0。那么得到的这个与x轴的交点其实是最终要求得的x的一次逼近,我们再以这个x基准继续迭代就可以求得更逼近的x,至于逼近到什么时候才算完,这个取决于你自己设定的精度。整个过程的迭代只需要几步就可以求得最终的结果。
/article/7931972.html
惊人的代码(求1/sqrt())http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html
二分法:
设其平方根为x,则有x2=a,即x2-a=0。设函数f(x)= x2-a,则可得图示红色的函数曲线。在曲线上任取一点(x0,f(x0)),其中x0≠0那么曲线上该点的切线方程为
(1-1)
求该切线与x轴的交点得
(1-2)
因为1-2式中x0作为分母,所以在之前限定了一下初始值不要选0。那么得到的这个与x轴的交点其实是最终要求得的x的一次逼近,我们再以这个x基准继续迭代就可以求得更逼近的x,至于逼近到什么时候才算完,这个取决于你自己设定的精度。整个过程的迭代只需要几步就可以求得最终的结果。
double nt_sqrt(double n) { double x = 1.0; while(abs(x*x-n) > 1e-5) x = (x+n/x)/2; return x; }
/article/7931972.html
惊人的代码(求1/sqrt())http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html
二分法:
int sqrt(int x) { int left = 1, right = x / 2; int mid; int last_mid; //记录最近一次mid if (x < 2) return x; while(left <= right) { mid = left + (right - left) / 2; if(x / mid > mid) // 不要用x > mid * mid,会溢出 { left = mid + 1; last_mid = mid; } else if(x / mid < mid) { right = mid - 1; } else { return mid; } } return last_mid; }
double sqrt(double n) //用二分法 { if(abs(n-(1e-5))<0) //小于0的按照你需要的处理 return n; double mid,last; double low,up; low=0,up=n; mid=(low+up)/2; do { if(mid*mid>n) up=mid; else low=mid; last=mid; mid=(up+low)/2; } while(abs(mid-last) > eps); //精度控制 return mid; }
相关文章推荐
- 实现sqrt函数功能,之前也是常见的面试题,本文两种解法,二分法,牛顿迭代法
- sqrt的实现-牛顿迭代法和二分法对比
- Sqrt(x) ,二分法,牛顿迭代法
- 1、编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代
- 关于使用牛顿迭代法和二分法解方程的算法说明
- 牛顿迭代法求近似根与二分法求根
- 使用二分法与牛顿迭代实现sqrt(int)
- LeetCode *** 69. Sqrt(x) 牛顿迭代法
- Python编程实现二分法和牛顿迭代法求平方根代码
- matlab中的开方sqrt用牛顿迭代法实现的代码
- 二分法pow和sqrt
- Codeforces 833A The Meaningless Game - 数论 - 牛顿迭代法 - 二分法
- 牛顿迭代法和二分法求方程的根
- 求平方根的方法(牛顿迭代法和二分法)
- leetcode 69. Sqrt(x)(C语言,牛顿迭代法求开方问题)46
- LeetCode-69-Sqrt(x)(二分法)-Medium
- 二分法和牛顿迭代法
- 用牛顿迭代法求根号2及sqrt(任意数),连续求解,保留小数点后16位
- 牛顿迭代法实现平方根函数sqrt
- 【SPOJ-TRIGALGE】Easy Calculation【二分法】【牛顿迭代法】