我正试图解决这个挑战,但我不知道我的代码是错误的,还是挑战的措辞是错误的。算法说:
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);
谢谢
您没有正确找到间隔的中点。您应该添加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);