fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // 計算する値の個数
  5. #define N 20
  6.  
  7. // 円周率
  8. #define M_PI acos(-1.0)
  9.  
  10. // 微分係数を計算する点
  11. #define x0 (M_PI / 8)
  12.  
  13. // 真の値 = sqrt(2)
  14. #define d0 sqrt(2)
  15.  
  16. // 関数 f
  17. double f(double x) { return sin(2 * x); }
  18.  
  19. // 相対誤差を計算する関数
  20. double err(double x) { return fabs(x - d0) / d0; }
  21.  
  22. // D_f
  23. double dif_f(double x, double h) { return (f(x + h) - f(x)) / h; }
  24.  
  25. // D_m
  26. double dif_m(double x, double h) { return (f(x + h) - f(x - h)) / (2 * h); }
  27.  
  28. int main(void) {
  29. for(int k = 0; k < N; k++) {
  30. // 刻み幅
  31. double h = pow(2, -3 - k);
  32.  
  33. // D_m の計算値
  34. double y = dif_m(x0, h);
  35.  
  36. // 値と誤差を表示
  37. printf("%2d: %e %.16lf %e %e\n", k, h, y, err(y), err(dif_f(x0, h)));
  38. }
  39.  
  40. return 0;
  41. }
Success #stdin #stdout 0s 9432KB
stdin
Standard input is empty
stdout
 0: 1.250000e-01  1.3995281382501878  1.038416e-02  1.347345e-01
 1: 6.250000e-02  1.4105335907091092  2.602133e-03  6.502080e-02
 2: 3.125000e-02  1.4132930302282549  6.509145e-04  3.189074e-02
 3: 1.562500e-02  1.4139833956233261  1.627525e-04  1.578648e-02
 4: 7.812500e-03  1.4141560185783746  4.068961e-05  7.853031e-03
 5: 3.906250e-03  1.4141991762926978  1.017250e-05  3.916403e-03
 6: 1.953125e-03  1.4142099658447762  2.543130e-06  1.955666e-03
 7: 9.765625e-04  1.4142126632405052  6.357828e-07  9.771980e-04
 8: 4.882812e-04  1.4142133375898993  1.589457e-07  4.884402e-04
 9: 2.441406e-04  1.4142135061772478  3.973646e-08  2.441804e-04
10: 1.220703e-04  1.4142135483243692  9.933949e-09  1.220802e-04
11: 6.103516e-05  1.4142135588608653  2.483522e-09  6.103764e-05
12: 3.051758e-05  1.4142135614947620  6.210754e-10  3.051820e-05
13: 1.525879e-05  1.4142135621550551  1.541776e-10  1.525894e-05
14: 7.629395e-06  1.4142135623187642  3.841781e-11  7.629426e-06
15: 3.814697e-06  1.4142135623696959  2.403655e-12  3.814693e-06
16: 1.907349e-06  1.4142135623551439  1.269341e-11  1.907343e-06
17: 9.536743e-07  1.4142135623842478  7.886103e-12  9.536469e-07
18: 4.768372e-07  1.4142135623842478  7.886103e-12  4.767783e-07
19: 2.384186e-07  1.4142135623842478  7.886103e-12  2.383852e-07