我无法弄清楚为什么这个算法在输入的数字超过12位数时进入了一个无限循环。有人能看出来它为什么永远不会结束吗?谢谢。 我刚刚更新了算法,使用了fabs()函数,但仍然进入了一个无限循环。
double squareroot(double x)
{ /* computes the square root of x */
/* make sure x is not negative .. no math crimes allowed! */
assert( x >= 0 );
if (x==0) return 0;
/* the sqrt must be between xhi and xlo */
double xhi = x;
double xlo = 0;
double guess = x/2;
/* We stop when guess*guess-x is very small */
while (abs(guess*guess-x) > 0.00001 )
{
if (guess*guess > x){
xhi = guess;
}
else {
xlo = guess;
}
guess = (xhi + xlo)/2;
}
return guess;
}
abs
是针对整数的函数。你是不是想说fabs
? - M Oehmguess*guess
的结果会有12位数字吗?那可真的是很大了。 - AnkurC
是正确的,但在C++
中,<cmath>
也有一个浮点数的重载版本用于abs
。 - TNA