zoukankan      html  css  js  c++  java
  • js实现sqrt开方函数(二分法)

    每次取一半的数和当前值做对比,如果比当前值大:下次的起始值不变,末尾值减一半(起始值与末尾值的和的一半);如果比当前值小:下次的起始值加一半(起始值与末尾值的和的一半),末尾值不变;直到起始值与末尾值的差值在指定范围内才结束,注意由于浮点数计算问题需要阻止死循环的情况(“起始值与末尾值的和的一半”与原来的值仍旧相同)
    如1000:第一次的值为(0,1000)
    1、 500*500        >1000  下一次用(0,500)
    2、 250*250     >1000  下一次用(0,250)
    3、 125*125              >1000        下一次用  (0,125)
    4、 62.5*62.5            >1000        下一次用  (0,62.5)
    5、 31.25*31.25        <1000        下一次用  (31.25,62.5)
    6、 46.875*46.875   >1000         下一次用  (31.25,46.875)
    ...
    ...
    ...
     
    function sqrt(num) {
        function sqrtWrapper(min, max) {
            let current = (min + max) / 2;
            let nextMin = min, nextMax = max;
            if (current * current > num) {
                nextMax = current;
            } else {
                nextMin = current;
            }
            if (min === nextMin && max === nextMax) {
                return current
            }
            else if (nextMax - nextMin < (1 / new Array(17).fill(10).reduce((a, b) => a * b, 1))) {
                return current;
            } else {
                return sqrtWrapper(nextMin, nextMax);
            }
        }
        return sqrtWrapper(0, num);
    }
    console.time();
    console.log(sqrt(3));
    console.timeEnd();
  • 相关阅读:
    POJ 2723 Get Luffy Out(2-SAT)
    ZOJ 3613 Wormhole Transport
    HDU 4085 Peach Blossom Spring
    NBUT 1221 Intermediary
    NBUT 1223 Friends number
    NBUT 1220 SPY
    NBUT 1218 You are my brother
    PAT 1131. Subway Map (30)
    ZSTU OJ 4273 玩具
    ZSTU OJ 4272 最佳淘汰算法
  • 原文地址:https://www.cnblogs.com/mapingchuan/p/13038961.html
Copyright © 2011-2022 走看看