zoukankan      html  css  js  c++  java
  • sqrt()平方根计算函数的实现1——二分法

     

    C语言标准库:

    http://www.cplusplus.com/reference/cmath/

    在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间数;如果小了,就再拿右区间的中间数来试。比如求sqrt(16)的结果,你先试(0+16)/2=8,8*8=64,64比16大,然后就向左移,试(0+8)/2=4,4*4=16刚好,得到了正确的结果sqrt(16)=4。

    实现时我第一次没有进行精度控制,导致一些不能完整开方的数运行不出来,也忘记了对非整数的判断。代码1为改正后的代码,后面代码2为第一次写的代码,贴在这里以作对比提醒。

    代码1:

    esp常在C++中用来控制迭代精度,是函数程序事先声明的常量,在微积分中是无限小值。

    float esp=0.000000;

    double sqrt(double x)

    {

           double down,up,n,last;

           down=0;

           up=x;

           n=(down+up)/2;

           if(x<=0)

           return x;

           while((n*n!=x)&&abs(last-n)>esp)

           {

                  if(n*n<x)

                  {

                         down=n;

                         last=n;

                         n=(down+up)/2;

                  }

                  else

                  {

                         up=n;

                         last=n;

                         n=(down+up)/2;

                  }

           }

           return n;

    }

    代码2:

    double sqrt(double x)

    {

           double down,up,n;

           down=0;

           up=x;

           n=(down+up)/2;

           while(n*n!=x)

           {

                  if(n*n<x)

                  {

                         down=n;

                         n=(down+up)/2;

                  }

                  else

                  {

                         up=n;

                         n=(down+up)/2;

                  }

           }

           return n;

    }

     参考:http://www.2cto.com/kf/201206/137256.html

  • 相关阅读:
    使用自制事务进行异常信息的记录:Autonomous transactionslog
    backup methodsexp and imp
    一个 SQL 同时验证帐号是否存在、密码是否正确
    使用存储过程进行分页:page by Procedure
    推荐一款类似于editplus的文本编辑工具:note++
    myeclipse8.5反编译插件的安装使用jdgui插件
    [转]JavaMail的使用之邮件发送 详解
    Thinking in java中内部类的例子。
    [转]tomcat6.0下的log4j日志文件配置过程
    127.X.X.X開頭的網路都是特殊用途的嗎!?
  • 原文地址:https://www.cnblogs.com/williamjie/p/11131314.html
Copyright © 2011-2022 走看看