关于参数太少的错误

时间:2013-11-21 06:15:44

标签: c compiler-errors

以下在int mainfp行的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;
}

1 个答案:

答案 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) {