#include #include #include /********* 表3.1のシンプソン公式の誤差を出力するプログラム ************ ・実行すると小区間の数 N(textのNに対応)の入力を求めます. ・コマンドラインの第一引数にNを与えることでも 即時に誤差|I-Pi/2|を出力することができます. 例) >simpson 12 ***********************************************************************/ #define Pi acos(-1.) //πの値 #define hPi Pi/2 //π/2の値 #define a -1 //積分下限 #define b 1 //積分上限 double f(double x){ double y; y = sqrt(1-pow(x,2)); return y; } int main(int argc, char **argv){ int i, N; double I, xi, yi, y0, yN, h; /********* 入力処理(始) ***********/ if(!(argc==1 || argc==2)){ printf("引数のエラーです\n"); return 1; } if(argc == 1){ printf("小区間の数N(偶数)を入力してください.\n N = "); scanf("%d",&N); }else{ argv++; N = atoi(*argv); } /********* 入力処理(終) **********/ if( !(fmod(N,2)==0) ){ //N奇数のときエラー printf("error!!\n"); return 2; } y0 = f(a); yN = f(b); I = y0+yN; //式(3.14)の{}中を計算 h = fabs(b-a)/N; for(i=1; i