求一个数的平方根
来源:互联网 发布:上瘾网络剧全集下载 编辑:程序博客网 时间:2024/05/17 18:01
方法一: 使用标准库函数, <math.h>中的sqrt函数直接计算。
其函数原型为: float sqrt (float),double sqrt (double),double long sqrt(double long)
但是不知道标准库函数时怎么实现的。
方法二:二分查找法
可以根据自己希望的精确度来规定循环的结束条件。
- double sqrtby2(double a)
- {
- if(a <= 0)
- return 0;
- double mid, pre;
- double low=0, high=a;
- mid = (low + high)/2;
- do{
- if(mid*mid > a)
- high = mid;
- else
- low = mid;
- pre = mid;
- mid = (low + high)/2;
- }while(abs(mid-pre) > 0.0000001);
- return mid;
- }
要计算a的平方根,首先随便猜一个估计值c,然后不断令c等于c和a/c的平均数。
- double sqrtbynewton(double a)
- {
- double c = a;//这里用a本身作为估计值
- double pre;
- do
- {
- pre = c;
- c = (x + a/c)/2;
- }while(abs(c-pre) > 0.0000001);
- return x;
- }
牛顿迭代法的依据:
设曲线f(x) = x^2 - a,那么该曲线与x轴的交点的x的值即为所求的a的平方根。现在,借助曲线的切线来逐步接近那个交点。该曲线在某个值x'处的切线为y=2x'(x-x')+x'^2-a。那么在曲线在估计值c时的切线为y=2c(x-c)+c^2-a,该切线与x轴的交点为(c+a/c)/2,作图即可看出,这个点距离所求点更接近了。
附加:Leetcode上也有此题,只不过要求返回值是int。如果在迭代时就用int,可能会死循环而求不出结果。所以还是先用浮点数求,然后再取整。
class Solution {public: int sqrt(int x) { if(x <= 0) return 0; double c = x; double old; do { old = c; c = (c + x/c)/2; }while(abs(old - c) > 0.0000001); return int(c); }};
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 面试题-求一个数的平方根
- 求一个数的平方根(C语言实现)
- leetcode-二分搜索:求一个数的平方根
- 求一个数的平方根—牛顿迭代法
- 牛顿迭代法求一个数的立方根、平方根
- 关于代码实现一个数求平方根
- 求一个实数的平方根
- 求一个大数的平方根
- 求一个整数的平方根
- 汇编语言: 用减奇数次数的方法,求一个数的近似平方根,这个平方根是一个整数。
- 求方程的近似解,不用库函数求一个数的平方根
- 牛顿迭代法求数的平方根
- 牛顿迭代法求数的平方根
- bootmgr is compressed
- Android 事件传递机制解析
- 仿qq联系人分层list&&分组悬浮向上滚动效果 最简化demo
- maven中snapshot快照库和release发布库的区别和作用
- 《梦李白·其一》 作者:杜甫
- 求一个数的平方根
- CTS android.animation包错误
- java 发送邮件
- 了解网络视频H.264的播放
- Dark Channel Prior的Matlab代码
- 大数据时代 如何让营销更精准?
- 桶排序 Bucket sort
- ANSI,ASCII,Unicode的区别与联系
- iOS模拟器,重新调出HOME键