fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // 関数 y = sqrt(x)
  5. double f(double x) {
  6. return sqrt(x);
  7. }
  8.  
  9. int main() {
  10. double a = 0.0, b = 1.0; // 積分区間 [0, 1]
  11. int n; // 分割数
  12. double true_value = 2.0 / 3.0; // 面積の真値 (解析解)
  13.  
  14. printf("分割数\t近似値\t\t誤差\n");
  15. for (n = 2; n <= 100; n *= 2) { // 分割数を増やして誤差を調べる
  16. double h = (b - a) / n; // 各台形の幅
  17. double approx = 0.0;
  18.  
  19. // 台形近似法の計算
  20. for (int i = 0; i < n; i++) {
  21. double x1 = a + i * h;
  22. double x2 = a + (i + 1) * h;
  23. approx += (f(x1) + f(x2)) * h / 2.0;
  24. }
  25.  
  26. // 誤差を計算
  27. double error = fabs(true_value - approx);
  28.  
  29. // 結果を出力
  30. printf("%d\t%.6f\t%.6f\n", n, approx, error);
  31. }
  32.  
  33. return 0;
  34. }
  35.  
Success #stdin #stdout 0s 5284KB
stdin
Standard input is empty
stdout
分割数	近似値		誤差
2	0.603553	0.063113
4	0.643283	0.023384
8	0.658130	0.008536
16	0.663581	0.003085
32	0.665559	0.001108
64	0.666271	0.000396