以下在int main
和fp
行的newton
部分中返回的参数太少。
你能解释一下吗?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double a, double b, double c, double x)
{
return pow(x,3)+a*pow(x,2)+b*x+c;
}
double fp(double a, double b, double c, double x)
{
return 3*pow(x,2)+(2*a*x)+b+0*c;
}
double newton(double a, double b, double c, double x)
{
return x - (f(a,b,c,x)/fp(a,b,c,x));
}
int main()
{
double a,b,c,x1,x2;
int i;
char *input = getenv("QUERY_STRING");
sscanf(input, "coeff1=%lf &coeff2=%lf &coeff3=%lf &x=%lf", &a, &b, &c, &x1);
if (fp(x1)==0.0)
{
printf("No convergence.\n");
return 0;
}
for (i=0;i<100;i++)
{
x2=newton(x1);
if (fabs(x1-x2)<= pow(10,-10)) break;
x1=x2;
}
printf("iteration = %d\n", i);
printf("x= %lf\n", x1);
return 0;
}
答案 0 :(得分:1)
错误说的是什么!你没有传递足够的论据:
这个原型:
fp(double a, double b, double c, double x) {
表示您需要传递四个参数,例如:
fp(x1, what, about, these);
newton
同样如此。
另外,关于if (fp(x1)==0.0)
- 当浮点零值可以相互比较时(零 excatly 0),请记住浮点数计算机不准确。因此,您应该始终与某个epsilon值进行比较:
#define EPSILON 0.0001 // salt to taste
#define ABS(x) ( ((x)<0) ? -(x) : x )
#define FP_EQUALS(x,y) (ABS(x-y) < EPSILON)
//if (d == 0.0) {
if (FP_EQUALS(d, 0.0)) {
// d is "zero"
}
//if (a == b) {
if (FP_EQUALS(a, b) {