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;
    }

    以进行编程了。

  • 相关阅读:
    文件操作
    join,列表和字典用for循环的删除,集合,深浅拷贝
    java多线程基础
    nginx应用及性能调优
    nginx 基本功能
    SpringBoot2.x 启动过程详解
    shell脚本的基本使用
    使用 maven 的 `wagon-maven-plugin`插件 快速部署 到不同的 环境
    Netty笔记(7)
    Netty笔记(6)
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/12828008.html
Copyright © 2011-2022 走看看