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的数值平方根
    
  • 相关阅读:
    python及pandas,numpy等知识点技巧点学习笔记
    人工智能,大数据,云计算大杂烩
    python开发环境
    机器学习vs深度学习及其知识点
    深入理解SVG坐标体系和transformations- viewport, viewBox,preserveAspectRatio
    军队改革看管理
    d3js path generator vs layouts
    d3js layout 深入理解
    RedisTemplate 事务处理方法 watch multi exec 的使用
    阻止联网
  • 原文地址:https://www.cnblogs.com/ss-jojo/p/14519194.html
Copyright © 2011-2022 走看看