zoukankan      html  css  js  c++  java
  • js开根号,使用二分法迭代

    偶然间看到一个比较奇葩的前端面试题,就是不使用math函数对2进行开平方
    ,嗯如果面是面试碰到这种题之前  我想会有点吃亏,所以我把它给记录下来,分享给大家而且以后碰到的话也方便查找
    
    //平方根函数
    function gen(initleft,initright,initnum,result){        //initleft:开始值   initright:结束值    initnum:要开方的值     result:保存小数点位数
        //接收开始值、结束值,计算中间点,然后根据中间点的平方进行判断迭代
        let left = initleft;
        let right = initright;
        let mid = (left+right)/2;
        //n是为了将计算结果取整处理,就是小数点后多少位乘以n
        let n = 10;
        for(let i=0;i<result;i++){
            n*=10
        }
        //首先把跳出条件定义好,-4与4是我根据四舍五入定义的一个判断条件点,取到小数点后几位 之后的一位一定要小于4,js对于浮点数操作会有误差0.1+0.2是不等于0.3的
        //这种计算结果也只能是无限接近,这里取后3位
        if((mid*mid*n-initnum*n>-4)&&(mid*mid*n-initnum*n<4)){
            console.log('mid=',mid.toFixed(result))
            return
        }else if(mid*mid<initnum){  //计算结果小于目标值,将中间点赋值开始值,然后重新调用
            left = mid
            mid = (left+right)/2
            gen(left,right,initnum,result)
        }else if(mid*mid>initnum){  //计算结果大于目标值,将中间点赋值结束值,然后重新调用
            right = mid
            mid = (left+right)/2
            gen(left,right,initnum,result)
        }
    }
    gen(0,2,2,3)    //求2的平方根,初始值0 结束值2,取小数点后三位,
    //这个方法不适用于小于1的数开平方,我也找不到原因。。小伙伴们可以试一下将求根对象换成小于1的数,比如0.5  0.6
    
    
    
    //然后下面是我找得一个牛顿迭代法,代码很简单,思想很巧妙,趁着学习一波然后记录下来,
    function sqrt(initNum,saveNum){//当n>=1时,从n开始迭代;当n<1时,从1开始迭代
        let result=initNum>=1?initNum:1;//当迭代值^2与原值之差满足一个很小的差值时,即可认为逼近开根值
        while(result*result-initNum>1e-8){//将计算结果与1的-8次幂进行比较,满足条件跳出
            result= (result+initNum/result)/2;
        }
        return result.toFixed(saveNum); 
    }
    console.log('result=',sqrt(10,12))  //求10的平方根,取小数点后12位,还有这个方法可以求小于1的数值平方根
    
  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/ss-jojo/p/14519194.html
Copyright © 2011-2022 走看看