平方根的牛顿迭代法

 我来答
青春无悔°嗶愝
2016-05-10 · 超过53用户采纳过TA的回答
知道答主
回答量:181
采纳率:50%
帮助的人:49.2万
展开全部

上述笔算开方方法是我们大多数人上学时课本附录给出的方法,实际中运算中太麻烦了。我们可以采取下面办法
  比如136161这个数字,首先我们找到一个和136161的平方根比较接近的数,任选一个,比方说300到400间的任何一个数,这里选350,作为代表。  我们先计算0.5(350+136161/350),结果为369.5。  然后我们再计算0.5(369.5+136161/369.5)得到369.0003,我们发现369.5和369.0003相差无几,并且,369²末尾数字为1。我们有理由断定369²=136161。  一般来说,能够开方开的尽的,用上述方法算一两次基本结果就出来了。再举个例子:计算 。首先我们发现600²<469225<700²,我们可以挑选650作为第一次计算的数。即算0.5(650+469225/650)得到685.9。而685附近只有685²末尾数字是5,因此685²=469225。从而 。   对于那些开方开不尽的数,用这种方法算两三次精度就很可观了,一般达到小数点后好几位。  实际中这种算法也是计算机用于开方的算法。
用Ruby求平方根.(注:sqrt = square root平方根) module MyMath    def sqrt(num,rx=1,e=1e-10) #参数1,需要求平方根的目标;参数2,迭代区间;参数3,精度        num*=1.0 #目标初始化       (num-rx*rx).abs < e ? rx : sqrt(num,(num/rx+rx)/2,e) #计算平方根    endendinclude MyMathputs sqrt(2) #求2的平方根puts sqrt(2,5,0.01) #求2的平方根+迭代区间与精度。C语言版求平方根 double Sqrt(double a,double p)//a是被开平方根数,p是所求精度{    double x=1.0;double cheak;    do    {        x = (a / x + x) / 2.0;        cheak = x * x - a;    } while((cheak >= 0 ? cheak : -cheak) > p);        return x;}int main(){    printf(%.4f\n,Sqrt(2.0,0.0001));    printf(%.4f\n,Sqrt(0.09,0.0001));    return 0;}输出结果:
1.4142
0.3000

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式