求一个数的平方根
来源:互联网 发布:视频倒放软件 编辑:程序博客网 时间:2024/05/16 00:47
求一个数的平方根的整数部分,二分搜索方法,若求浮点数,使用牛顿迭代法。
计算x2 = n的解,令f(x)=x2-n,相当于求解f(x)=0的解,如左图所示。
首先取x0,如果x0不是解,做一个经过(x0,f(x0))这个点的切线,与x轴的交点为x1。
同样的道理,如果x1不是解,做一个经过(x1,f(x1))这个点的切线,与x轴的交点为x2。
以此类推。
以这样的方式得到的xi会无限趋近于f(x)=0的解。
判断xi是否是f(x)=0的解有两种方法:
一是直接计算f(xi)的值判断是否为0,二是判断前后两个解xi和xi-1是否无限接近。
经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),其中f'(x)为f(x)的导数,本题中为2x。令切线方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。
继续化简,xi+1=xi - (xi2 - n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。
#include <iostream>using namespace std;int sqrt(int x) { if(x<0) return -1; else if(x == 0||x == 1) return x; else { unsigned int mid; mid = x/2; unsigned int div; while(mid >= 0) { div = x/mid; if(div == mid) return mid; else if(div > mid) { while(mid*mid<x) { mid++; } if(mid*mid==x) return mid; return mid-1; } while(mid > div+1) { mid = mid>>1; div = div<<1; } mid--; } }}int main(){ while(1) { int m; cin>>m; cout<<sqrt(m)<<endl; } return 0;}
0 0
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 求一个数的平方根
- 面试题-求一个数的平方根
- 求一个数的平方根(C语言实现)
- leetcode-二分搜索:求一个数的平方根
- 求一个数的平方根—牛顿迭代法
- 牛顿迭代法求一个数的立方根、平方根
- 关于代码实现一个数求平方根
- 求一个实数的平方根
- 求一个大数的平方根
- 求一个整数的平方根
- 汇编语言: 用减奇数次数的方法,求一个数的近似平方根,这个平方根是一个整数。
- 求方程的近似解,不用库函数求一个数的平方根
- 牛顿迭代法求数的平方根
- 牛顿迭代法求数的平方根
- eclipse调试
- QTP测试流程
- c#如何读取txt文件内容
- LoadRunner性能测试基础知识问答
- 过 DNF TP 驱动保护(二)
- 求一个数的平方根
- 虚拟机VMware下安装RedHat Linux 9.0 图解
- C#复制文件夹的文件到另一个文件夹
- 利用栈对二叉树进行遍历
- assert.h中assert的作用
- [我是菜鸟]MFC 单文档 修改标题
- 编程之美资格赛题目2 : 大神与三位小伙伴
- 适宜于减肥的运动法
- strtok、strtok_s、strtok_r 字符串分割函数