我正在尝试解决这个挑战,但我不知道我的代码是否错误,或者挑战的措辞是否错误。该算法表示:
- 选择两个数字
S,E
。X
平方根必须位于[S,E]
区间内。 - 选择所需的精度
e
。 - 当前间隔的中间值
M
将是一个很好的近似值。 当间隔
[S,E]
大于e
时,执行:- 求当前区间M的中间值
M
; 如果 M^2 > x
,E = M
,否则,S = M
;- 当长度为
我们的区间小于
e
,即X = M
的平方根。
- 求当前区间M的中间值
下面的代码产生无限循环:
e = 0.001; //I want square root of 10
n = "10";
x = parseInt(n);
E = (x / 2);
S = 1;
M = ((E - S) / 2);
tam = (E - S);
while (tam >= e) {
console.log(M)
if ((M * M) > x) {
E = M;
} else {
S = M
};
M = ((E - S) / 2);
tam = (E - S);
}
console.log(n + ": " + M);
谢谢
最佳答案
您没有正确找到间隔的中点。您应该添加 E
和 S
并除以二而不是相减。
e=0.001; //I want square root of 10
n="10";
x=parseInt(n);
E=(x/2);
S=1;
M=((E+S)/2);
tam = (E-S);
while(tam>=e){
console.log(M)
if ((M*M)>x){E=M;}else{S=M};
M=((E+S)/2);
tam = (E-S);
} console.log(n+": "+M);
关于javascript - 近似平方根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55653676/