我正在尝试解决此挑战,但是我不知道我的代码是否错误,或者挑战的措辞是否错误。该算法说:


选择两个数字S,EX平方根必须在[S,E]间隔内。
选择所需的精度e
当前间隔的中间值M将是一个很好的近似值。
当间隔[S,E]大于e时,请执行以下操作:


查找当前间隔的中间值M;
if M^2 > xE = 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);


谢谢

最佳答案

您找不到正确的间隔的中点。您应该添加ES并除以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);

08-08 06:10