zoukankan      html  css  js  c++  java
  • 求平方根的算法 牛顿迭代法和二分法

    牛顿法:

    public double sqr(double n){
            double x=n,y=0.0;
            while (Math.abs(x-y)>0.0001){
                y=x;
                x=(x+n/x)/2;
            }
            return x;
        }

    设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。

    过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

    二分法:

    #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;
                mid = (up+low)/2;
            } while (fabsf(mid - last) > eps);
            return mid;
        
        }
  • 相关阅读:
    75
    74
    接口理论知识
    软件测试计划的编写
    软件测试的生命周期&软件测试工作流程
    软件测试分类体系系统学习
    Mysql之高级查询
    数据库的DML操作
    Mysql之数据完整性约束
    Mysql之DDL操作
  • 原文地址:https://www.cnblogs.com/10zhang/p/10557649.html
Copyright © 2011-2022 走看看