fork download
  1. #include <stdio.h>
  2. #include <math.h> // sqrt関数を使用するために必要
  3.  
  4. // 関数 f(x) = sqrt(x) を定義
  5. double f(double x) {
  6. return sqrt(x);
  7. }
  8.  
  9. int main() {
  10. const int N = 20; // 最大分割数
  11. double d, s, tru, e; // 各種変数
  12. int m; // 分割数
  13.  
  14. tru = 9.0; // 面積の真値 (問題に基づく)
  15.  
  16. // 結果を表示 (分割数、誤差)
  17. printf("分割数\t誤差\n");
  18. for (m = 2; m <= N; m++) {
  19. d = 1.0 / m; // 区間幅
  20. s = 0.0; // 面積の初期化
  21.  
  22. // 台形公式による面積計算
  23. for (int a = 0; a < m; a++) {
  24. s += (f(a * d) + f((a + 1) * d)) * d / 2.0;
  25. }
  26.  
  27. // 面積のスケーリング
  28. s *= 9.0; // 問題に合わせて面積をスケールアップ
  29.  
  30. e = fabs(s - tru); // 誤差の絶対値
  31. printf("%d\t%.6f\n", m, e); // 分割数、誤差を出力
  32. }
  33.  
  34. return 0;
  35. }
  36.  
Success #stdin #stdout 0s 5272KB
stdin
Standard input is empty
stdout
分割数	誤差
2	3.568019
3	3.318459
4	3.210453
5	3.152353
6	3.116891
7	3.093372
8	3.076828
9	3.064666
10	3.055416
11	3.048185
12	3.042405
13	3.037698
14	3.033804
15	3.030539
16	3.027769
17	3.025395
18	3.023342
19	3.021552
20	3.019981