我正在尝试解决此挑战,但是我不知道我的代码是否错误,或者挑战的措辞是否错误。该算法说:
选择两个数字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);