這是一個平分根法請幫我找出爲什麼我處於無限循環?
double p1::root(double (*pf)(double k), int a, int b, double e) {
// void nrerror(char error_text[]);
double left = (double)a;
double right = (double)b;
double midpoint;
do
{
midpoint = ((right+left)/2);
if(pf(left) *pf(midpoint) <0){
right = midpoint;
}
else if(pf(right) * pf(midpoint) <0){
left = midpoint;
}
else{
break;
}
}while(abs(right-left) >2*e && abs(left-right)>e);
return midpoint;
}
'pf','a','b'和'e'的值是什麼? – MSN 2011-04-21 23:04:56
雖然這不是你的問題,但你的while比較有點多餘 - 只使用abs(右 - 左)> 2 * e的技巧 – 2011-04-21 23:07:02
你是否傳遞了一個無限循環的「pf」函數? – 2011-04-21 23:10:46