我正在尝试解决此挑战,但是我不知道我的代码是否错误,或者挑战的措词是否错误。该算法说:
S,E
。 X
的平方根必须在[S,E]
的间隔内。e
。M
将是一个很好的近似值。当间隔[S,E]
大于e
时,请执行以下操作:
M
的中间值; if M^2 > x
,E = M
,否则,S = M
; e
的平方根X = 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);
谢谢
答案 0 :(得分:1)
您没有正确找到间隔的中点。您应该将E
和S
相加并除以2,而不是减去。
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);