开根号的几类算法总结

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

 

首先是最基本的二分开根号,这个比较容易理解,复杂度比起下面讲的牛顿迭代法要高,更容易理解。 
下面给出代码:

#define eps 0.00001
float SqrtByDichotomy(float n)
{
    if(n<0)
    {
        return -1.0;
    }
    else
    {   
        float low,up,mid,last; 
        low=0,up=(n>=1?n:1); 
        mid=(low+up)/2; 

        do
        {
            if(mid*mid>n)
                up=mid; 
            else 
                low=mid;

            last=mid;
            mid=(up+low)/2;         

        }while(fabsf(mid-last) > eps);   //求浮点数x的绝对值

        return mid; 
    }
}

牛顿迭代法
这个算法的复杂度比二分法低。 
牛顿迭代法——百度百科里面讲的很清楚。

http://baike.baidu.com/view/643093.htm

设r是 的根,选取 作为r的初始近似值,过点 做曲线 的切线L,L的方程为 ,求出L与x轴交点的横坐标 ,称x1为r的一次近似值。过点 做曲线 的切线,并求该切线与x轴交点的横坐标 ,称 为r的二次近似值。重复以上过程,得r的近似值序列,其中, 称为r的 次近似值,上式称为牛顿迭代公式。

如果只是开根号运算的话,迭代公式为:

double SQR(double a){
    double x=a,y=0.0;
    while(fabs(x-y)>0.00001){
        y=x;
        x=0.5*(x+a/x);
    }
    return x;
}

还有其他算法先不看了,感觉把这两种弄明白差不多了,有一种Carmack算法精度不够,但是复杂度低,感兴趣的时候可以看看。
--------------------- 
作者:th是个小屁孩 
来源:CSDN 
原文:https://blog.csdn.net/u013775952/article/details/51452855 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

作者:黄徐升
链接:https://www.zhihu.com/question/20690553/answer/543620219
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

有一个利用“将长方形变得更像正方形”的思路也可以得到求 A 的算数平方根的迭代公式

x_{k+1}=\dfrac{1}{2}\left( x_{k}+\dfrac{A}{x_k} \right)\\

算是通俗易懂地得到了这个迭代公式(不过并没有体现牛顿法的求导等过程,那个用抛物线的切线看是比较直观的,别的回答里已经有了)。

首先是考虑\sqrt{A} 是面积为A 的正方形的边长,如果画一个邻边不等的面积是 A 长方形,设这个长方形的长为L ,宽为A/L ,那么怎样能让这个长方形变得更像一个正方形呢?是要把长变得短一点,宽变得长一点,可以用长和宽的平均数(L+A/L)/2 来作为新的长 L_{new} ,在面积不变的条件下,新的宽是 A/L_{new} 。这样不断操作下去,长方形的长和宽会越来越接近,就是一直趋近与 \sqrt{A} 了。

这里更新长方形长的方法

L_{new}=\frac{1}{2}\left( L+\frac{A}{L} \right) \\

也就是求 \sqrt{A} 的迭代公式。

附上两张康奈尔大学的课件,来自 L1courseIntro.ppt [Compatibility Mode],我是从这里看到这个方法的。

 

hdu5608 几类经典的根号复杂度算法 I, as a ACMer, always take algorithm complexity into consideration when programming. Today, I introduce you some elegant algorithms of root Complex. 阅读详情

相关推荐

2月26日 Discrete logging(哈希表+离散对数+BSGS算法)

学第一天,有点困,不过天气不错,手脚能放了。今天学习了离散对数的几类问题,也是始涉及密码学的核心:对于离散对数:$A^x\equiv B \mod p$如果要求B,那就是幂模问题,用快速幂求模。如果未知x,就是一个重要的离散对数/密码学问题,直观的我们想:是不是可以从1枚举到p-1(欧拉函数)?不过这个销比较大,有一种算法(BSGS,大步小步/北上广深(!?)算法)可以解决这类问题。将x写...

反之亦然 608

根号的几种算法实现

本代码实现了多种根号算法,方便大家对比。

深挖:视频号怎么运营?视频号几类最容易变现

“视频号”。坐拥V信数十亿用户的流量入口。背靠V信巨大的流量池,视频号在内测阶段已经碾压大部分同行了。视频号也当之无愧的成为2020年最被看好的短视频平台,顺理成章的成为新一代流量红利风口。 那么很多人为什么知道视频号是一个机会,但是一直都没有始呢? 很多人都在等,都在等真的有一些草根号,等草根号做出了好的内容,真正的做到了效果,这时候才会考虑是时候始做了。 很多人的观点是,边走边看,不要轻易下水。 因为很多人不知道平台的规则,所以不敢轻易下水,那么当懂得了平台的规则,就是入手的最好时机

公众号:国仁楠哥 1022

算法系列】-根号

一 序    本篇属于算法整理系列。   不能否认,有的大公司重视基础,算法可能就是重要考察点。   题目:实现函数:double sqrt(int v, double t) 假设函数的返回结果为 r,  要求 r 要满足一定的误差条件, 用公式表达就是:    ,     其中 根号V是真实的值 ,    t 为给定的一个误差, 例如0.1 。 二 循环法  

bohu83的博客 1万+

一起装逼!平方的七种算法

点击蓝色“五分钟学算法”关注我哟加个“星标”,天天中午 12:15,一起学算法作者 | nash_来源 | CSDNsqrt()函数,是绝大部分语言支持的常用函数,它实现...

程序员吴师兄的博客 3694

【每日算法Day 67】经典面试题:手动根号,你知道几种方法?

题目链接 LeetCode 69. x 的平方根[1] 题目描述 实现 int sqrt(int n) 函数。 计算并返回 的平方根,其中 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例1 ...

算法码上来 1882

计算机如何实现根号

今天看到一个问题:计算机如何实现根号? 如何求一个数字的算术平方根(又叫根号,或者方)? 大家普遍都是用计算器直接计算的,对于程序员来说,就是调用sqrt()方法。但是其内部又是怎么实现的呢?下面作了下总结。 方法一:迭代法 学过计算方法的应该都还有印象:一个函数 f(x) 在区间 [a,b] 上连续,且 f(x)=0 在 x∈[a,...

baningtao1470的博客 2450

解平方根算法(四种解法+层层深入+逐步简化)

内容不谈。你说的很有道理

m0_74215326的博客 5994

数值分析与科学计算导引——误差与算法举例

数值分析主要研究的是如何利用计算机等工具,对各种数学问题进行数值求解。的误差限是一位的半个单位,该位到。

2301_81197800的博客 1283

深挖:视频号怎么运营?视频号几类最容易入手

“视频号”。坐拥V信数十亿用户的流量入口。背靠V信巨大的流量池,视频号在内测阶段已经碾压大部分同行了。视频号也当之无愧的成为2020年最被看好的短视频平台,顺理成章的成为新一代流量红利风口。 ​ 那么很多人为什么知道视频号是一个机会,但是一直都没有始呢? 很多人都在等,都在等真的有一些草根号,等草根号做出了好的内容,真正的做到了效果,这时候才会考虑是时候始做了。 ​ 很多人的观点是,边走边看,不要轻易下水。 因为很多人不知道平台的规则,所以不敢轻易下水,那么当懂得了平台的规则,就是入手的最好

562

2020牛客寒假算法基础集训营5 部分题解(BDEH)

B: 牛牛战队的比赛地(二分做法) 题意:二维平面给定n个点,在x轴找一点使得到n个点距离的最大值最小。 思路: 我们可以将问题转化为在x轴找到一个圆心,使得该圆包含这n个点且半径最小,这样就变成了最小圆覆盖问题。有关于最大值最小此类问题,我们第一个想到的就应该是二分了,关键在于二分半径后如何check呢? 首先我们需要明白这样一个前提,也是解题的关键点:一个半径为R的圆,我们任意在圆上或圆内找一...

黄稳健boby的博客 404

2020 JAVA后端面试算法题以及面试框架总结

4月份下旬的时候由于公司经济不景气倒闭了,经历了一波失业潮,休息了一个月,5月中旬始重新找工作。半个月收到一些offer(某信,某康保险,某团,某学,某知名技术论坛等等。。。)。并且一边找工作一边总结了一下自己的知识体系和面试遇到的问题,现在放在这里共大家参考一下。 20年上半年真的太难了,海啸,地震,新冠病毒,虫灾,火灾等等。。。导致失业、股灾、暴乱。。。祝大家在20年都平平安安地活着。 标题 ...

无名后生 1363

怒刷牛客JAVA面经(2)

继续自信。

g1o3d的博客 1141

间歇性预测算法 - Croston

上一篇文章中已经介绍了五种时序预测算法针对快中慢流件的不同产品之间的一个使用效果,发现时序预测算法对慢流件的预测效果很差,因为慢流件的需求往往很稀疏,不规则,所以需要引入新的预测算法,比如间歇性需求预测算法。本文将介绍经典的几类间歇性预测算法

abca1101的博客 738

K-Means算法

K-Means算法简介:聚类是一种无监督的学习,即数据没有所属分类的标签,通过计算数据间的“距离”,将“距离”上靠近的一些数据划分为一类,这样就将无序的数据进行了分类,至于最后划分成几类,也就是K均值聚类算法中的K了。 K-Means的工作流程: 首先,随机选取K个点做为质心,第一次遍历整个数据集,计算每一条数据和K个质心的距离(每一条数据都要和k个质心计算一下距离,都计算完了找到距离最小的,记录该距离并把对应的是哪个质心记录下来,然后对下一条数据进行计算),第一次遍历结束所有数据都有了所属的分类,整个数据

weixin_43697515的博客 344

求解器的核心算法到底是什么?从原理到应用的全景解析

随着企业数字化转型的深入,求解器将成为“智能决策的核心”——而国产求解器比如COPT,凭借自主可控的算法和针对性的行业优化,将在更多场景中“突围”,成为企业的“决策引擎”。比如供应链中的车辆路径问题(VRP),变量是车辆的路线,约束是时间窗、载重限制——通用的分支定界法太慢,用“节约算法”(一种启发式算法)可以快速找到较优路线。当变量必须取整数时,线性规划的顶点可能不是整数解——比如“选3个仓库”的问题,变量是0或1,线性规划的解可能是“选2.5个仓库”,这显然不合理。如何让算法更透明,是未来的挑战。

shanshuinfo的博客 1240

测试发实习

滴滴面试 2020.12.14 二叉树查找结点 二叉树根节点到某个结点的路径 查找1-n中含有5的数 跟谁学笔试 (时间相近) 计算根号2,不用库函数 一对幼年兔子,一个月后长成成年兔子后便可以每月繁衍一对小兔子,问第n个月兔子的对数 ...

qq_43749617的博客 149

米哈游大模型算法岗,竞争真的太激烈了!

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。不得不说,米哈游真的是大热门,面试真的好多好多人,竞争真的好激烈!还好我提前看了一些面试高频问题和面经分享,成功拿下了梦想中的 offer!今天和大家分享一下最近常被问到的面试题,希望助力大家都能拿到心仪的offer!

2201_75499313的博客 1350
上一篇: autorelease 对象可能造成的内存崩溃
下一篇: 算法笔记——15个瓶子,4只老鼠,测试哪瓶有毒
dave-li
博客等级 码龄15年 10粉丝 118原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值