【发布时间】:2014-03-19 07:07:35
【问题描述】:
我将编译并运行此程序以使用 Newton-Raphson 算法求解方程,但 do-while 循环中的迭代次数始终为 1,不应该是这种情况。
代码
#include<math.h>
#include<stdio.h>
float fonc(float x){
float result;
result=2*(pow(x,3))-x-2;
return result;
}
float foncprime(float x){
float result;
result= 6*(pow(x,2))-1;
return result;
}
int main(void)
{
long double x1,x0;
float eps;
eps=0.5*pow(10,-4);
x0=1;
x1=1;
int i=0;
do
{
x0=x1;
x1=x0-(fonc(x0)/foncprime(x0));
i++;
}
while(x1-x0>eps);
printf("%d",i);
}
【问题讨论】:
-
不要养成使用
pow计算整数幂的习惯。将x*x用于x平方,x*x*x用于x立方,5E-5用于5/100000(或0.5E-4,如果您愿意的话。)pow慢很多,有时准确度稍差. -
@rici 我很感激你的建议永远不会忘记谢谢。