如何在不使用Java库和内置方法的情况下计算平方根?

时间:2018-09-23 17:18:58

标签: javascript sqrt

请帮助我编写一个使用以下公式计算正实数的平方根的函数:

x i+1 = (1/2) * (xi + (A / x1)),

其中'A'-输入实数。

在零迭代中,采用下一条语句x0 = A 错误至少应为10-6

输出

sqrt (2) = 1.414
sqrt (9) = 3
sqrt (25) = 5

2 个答案:

答案 0 :(得分:5)

您可以采用x i x)和x i + 1 x1)的新值,并检查值是否相等。然后结束序列并返回该值。

开始时,您需要一个适当的值,例如给定值的一半。

function sqrt(a) {
    var x,
        x1 = a / 2;
        
    do {
        x = x1;
        x1 = (x + (a / x)) / 2;
    } while (x !== x1);
    return x;
}

console.log(sqrt (2)); // 1.414
console.log(sqrt (9)); // 3
console.log(sqrt (25)); // 5

答案 1 :(得分:1)

您还可以使用二等分法-一种解决问题的更通用方法:

var sqrt = function(n) {
    if (n<0) {
        throw "are you kidding?! we are REAL here.";
    }
    if (n === 0) {
        return 0;
    }
    var bisect = function(l,r) {
        var avg = (l+r)/2;
        if (r-l<0.00000001) {
            return (l+r)/2;
        }
        if (avg*avg > n) {
            return bisect(l, avg);
        } else if (avg*avg < n) {
            return bisect(avg, r);
        }
    }
    return bisect(0, n < 1 ? 1 : n);
}