gpt4 book ai didi

c - 关于参数太少的错误

转载 作者:行者123 更新时间:2023-11-30 21:44:11 24 4
gpt4 key购买 nike

下面的代码在 fpnewton 行的 int main 部分中返回的参数太少。你能解释一下吗?

#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;
}

最佳答案

正如错误所说!您还没有传递足够的参数:

这个原型(prototype):

fp(double a, double b, double c, double x) {

意味着您需要传递四个参数,例如:

fp(x1, what, about, these);

牛顿也是如此。

此外,关于 if (fp(x1)==0.0) - 虽然浮点零值可以相互比较(零非常 零),请记住计算机上的 float 并不精确。因此,您应该始终与某个 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) {

关于c - 关于参数太少的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com