C言語、二分法でf(x)=e^x-x²-2=0の区間[1 , 2]における解を求めるプログラムなんですが、
エラーメッセージ、expへ渡す引数が少なすぎますと出て、プログラムが走りません。
なぜでしょうか?
プログラムはこちらです。
C
1 2#include <stdio.h> 3#include <math.h> 4 5double f(double x); 6double power(double x, int n); 7int main(void){ 8 double eps=1.0e-13; 9 double a=1.0, b=2.0; 10 double u,c; 11 int k; 12 13 for(k=0; fabs(a-b)>eps; k++){ 14 c=(a+b)/2; 15 if(f(c)*f(a)<=0) b=c; 16 else a=c; 17 } 18 printf("ans=%.13f \n",c); 19 u=a-b; 20 printf("k=%d,a=%lf,b=%lf,u(a-k)=%lf\n",k,a,b,u); 21 return 0; 22 } 23double f(double x){ 24 double x2,y; 25 float expf(float x); 26 27 x2=power(x,2); 28 29 y=expf(x)-x2-2; 30 return y; 31 } 32 33double power(double x, int n){ 34 if(n==0) return 1; 35 else 36 return x*power(x,n-1); 37} 38
訂正
c
1 2#include <stdio.h> 3#include <math.h> 4#include<stdlib.h> 5double f(double x); 6double power(double x, int n); 7int main(void){ 8 double eps=1.0e-13; 9 double a=1.0, b=2.0; 10 double u,c; 11 int k; 12 13 for(k=0; fabs(a-b)>eps; k++){ 14 c=(a+b)/2; 15 if(f(c)*f(a)<=0) b=c; 16 else a=c; 17 } 18 printf("ans=%.13f \n",c); 19 u=a-b; 20 printf("k=%d,a=%lf,b=%lf,u(a-k)=%lf\n",k,a,b,u); 21 return 0; 22 } 23double f(double x){ 24 double x2,y,k; 25 double exp(double x); 26 k=exp(x); 27 x2=power(x,2); 28 29 y=k-x2-2; 30 return y; 31 } 32 33double power(double x, int n){ 34 if(n==0) return 1; 35 else 36 return x*power(x,n-1); 37} 38
‘exp’に対する定義されていない参照です。とメッセージがでます。。
他にも間違えている点がありましたら、教えていただけると嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/30 13:41
2020/05/30 14:00
2020/05/30 14:11
2020/05/30 14:17
2020/05/30 14:18
2020/05/30 14:22
2020/05/30 14:23
2020/05/30 14:27