牛顿迭代法算近似平方根

在《算法》一书中看到一个用“牛顿迭代法”求平方根的算法,当时就一脸懵逼,压根看不懂啊。
百度了下“牛顿迭代法”,尼玛压根看不懂,内容中涉及到的曲线方程求导函数,以及求切线方程的知识都还给高中老师了,不看懂我心里难受,于是硬着头皮恶补相关知识。

很多朋友把相关的知识写得很详细,关键在于理解平方根与牛顿迭代法的关系,这里不详细描述,只贴代码。

 /**
      * 牛顿迭代法
      * @param num float 需要求平方根的数字
      * @param e float 要求最大误差不得超过e
      * @return
      */
     private static float sqrtNewton(float num, float e) {


         float guess = num / 2;
         float e0;
         int count = 0;

         do {
                //牛顿迭代法用在这里了
                //简化的写法:guess = (guess + num / guess) / 2;
                guess = guess-(guess*guess-num)/(2*guess);
                e0 = guess*guess - num;
                count++;
                System.out.println("第"+ count + "次计算:"+"guess="+guess+",误差="+e0);
         } while (e0 > e);

         System.out.println("经过"+count+"次计算,得到的结果为"+guess);

         return guess;
    }

来自《算法》一书的算法:

public static double sqrt(double c){
        if(c<0)
            return Double.NaN;
        //猜测值
        double t = c;
        //误差
        double err = 1e-15;

        while(Math.abs(t-c/t) > err*t){
            t = (c/t+t)/2.0;
        }
        return t;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值