#include //#define float double float f(float x) { return 4.0/(1+x*x); // f(x) = 4/(1+x^2) } float Trapez(float a, float b, float (*f)(float), int n) /* 累積誤差がない単精度の数値積分ルーチン(台形公式) */ { int i; float h, s; h = _____?_____; s = ________?________; for (i = 1; i < n; i++) { s = ______?______; // 累積誤差はない } return h * s; } float Trapez2(float a, float b, float (*f)(float), int n) /* 累積誤差がある単精度の数値積分ルーチン(台形公式) */ { int i; float h, x, s; h = _____?_____; x = _; s = ________?________; for (i = 1; i < n; i++) { x = __?__; // 累積誤差発生要因 s = ____?____; } return h * s; } int main(void) { int n; float a, b; a = 0; b = 1; printf("# 分割数, 累積誤差なし, 累積誤差あり\n"); for (n=40; n<=10000; n+=20) printf("%5d, % .15e, % .15e\n", n, Trapez(a, b, f, n), Trapez2(a, b, f, n)); return 0; }