zoukankan      html  css  js  c++  java
  • 求x得平方根得两种方法

    一个经典得题目是求平方根(见leetcode第69题)

    题目如下,对于某个浮点数x,求其平方根。

    方法一:二分法:

    这种是最简单的,就是定义一个最小值0和最大值number,把一个数取一个中间值(0+number)/2,然后平方,如果平方大于该数值,就把中间值赋给最大值,否者就把中间值赋给最小值,一直循环,直到取到想要的精度为止。

    //二分法 
    double sqrt1(double x){
        double EPSINON = 0.00001;
        double low = 0.0;
        double high = x;
        double mid = (low + high) / 2;
        while ((high - low) > EPSINON){
            if (mid*mid > x){
                high = mid;
            }
            else{
                low = mid;
            }
            mid = (high + low) / 2;
        }
        return mid;
    }

    方法二:牛顿法

    这个也是有迹可循的,求平方根即x^2=n。
    令f(x)=x^2-n
    如图所示:
    取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是否无限接近。

    先采用第一种方法判断
    (f(x)-f(xi))/(x-xi)=f’(x),f’(x)是斜率也是f(x)的导函数,即f’(x)=2x。
    化简得:f(xi)=f(x)-f’(x)(x-xi),令f(xi)=0得:
    (x^2-n)-2x(x-xi)=0
    持续化简得:
    xx-n-2xx+2xxi=0
    2xxi=xx+n
    2xi=x+n/x
    xi=(x+n/x)/2
    这样就得到了一元等式,就可

    //牛顿迭代法 
    double sqrt2(double x) {
        if (x == 0) return 0;
        double last = 0.0;
        double res = 1.0;
        while (res != last)
        {
            last = res;
            res = (res + x / res) / 2;
        }
        return res;
    }

    以进行编程了。

  • 相关阅读:
    RabbitMQ 入门
    Spring boot 2.x 中使用redis
    spring boot 中 Cache 的使用
    vbs 入门
    移动端文本框被原生键盘弹出后挡住文本框
    HTML中添加音乐video embed audio
    input修改placeholder文字颜色
    vue中更换.ico图标报错路径找不到图片
    Chrome表单文本框自动填充黄色背景色样式
    请求头缺少 'Access-Control-Allow-Origin'
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/12828008.html
Copyright © 2011-2022 走看看