プログラムについての質問です。 シンプソン法を用いて区間[0,1]でexpxを積分した値を求めるプログラムを作ろうとしているのですがエラーが生じ、エラーメッセージの意味がわからないため質問させていただきます。
プログラムについてですがEPSは分割数Nの場合と分割数2Nの場合の定積分値を比較しその差の絶対値がEPSよりも小さいときに定積分値の計算が終了しそれまでは分割数Nを二倍ずつ増加させる再帰的なプログラムとするためのものです。
C
1#include<stdio.h> 2#include <math.h> 3 4double funk(double x); 5double simpson(double a, double b, int n, double (*f)()); 6 7int main(void) 8{ 9double *g; 10double EPS; 11 12printf("sei no seisuu wo nyuuryoku\n"); 13scanf("%f",EPS); 14 15*g = EPS; 16 17printf("exp(x) wo [0,1] de sekibun simasu. bunkatu suu ha %f desu \n",2*EPS); 18printf("result is %20.15f\n",simpson(0, 1.0, EPS, funk)); 19return 0; 20} 21 22double simpson(double a, double b, int n, double (*f)()) { 23 24double S,h; 25int i; 26 27h=(b-a)/(2.0*n); 28 29S=((*f)(a)+(*f)(b)); 30 31for (i=1;i<n;i++) 32{ 33S += 4.0*(*f)(a+(2.0*i-1.0)*h)+2.0*(*f)(a+2.0*i*h); } 34 35S += 4.0*(*f)(a+(2.0*n-1.0)*h); S *= h/3.0; return S; 36} 37 38double EPS(double *g) 39{ 40int n; 41 42*g = (simpson(0, 1.0, 2.0*n, funk)- simpson(0, 1.0, n, funk)); 43 44if(*g < f) 45 46return simpson(0,1,n,funk); 47 48else return 1; 49} 50 51double funk(double x) { 52return (exp(x)); 53}
エラーメッセージ
4.1.c: 関数'EPS'内:
4.1.c:45:7: 二項演算子 < への無効な被演算子です('double'と'double ()(double()' if(*g < EPS)
と表示されます。改善策(具体的なコードを提示していただけると助かります)を教えてください。